У меня есть проект монорепо, работающий с NX. Все работает нормально, но я попытался добавить промежуточное программное обеспечение, но оно не попадает в запросы. Я пробовал ставить его в разные места и с _ в названии, но безуспешно. Кто-нибудь знает, что здесь может быть не так? Вот изображение моего проекта и дистрибутива промежуточного программного обеспечения. Я использую Nextjs 14.0.4.
Это код моего промежуточного программного обеспечения:
import { NextResponse } from 'next/server';
import { NextRequest } from 'next/server';
export default function middleware(request: NextRequest) {
const pathname = request.nextUrl.pathname;
console.info('MIDDELWAREEEE');
const publicPaths = ['/login', '/register'];
if (publicPaths.includes(pathname)) {
return NextResponse.next();
}
const token = request.cookies.get('auth_token');
console.info('token', token);
if (!token) {
return redirectToLogin(request);
}
if (!token.value) {
return redirectToLogin(request);
}
}
function redirectToLogin(req: NextRequest) {
const url = req.nextUrl.clone();
url.pathname = '/login';
return NextResponse.redirect(url);
}
Файл промежуточного программного обеспечения должен находиться на том же уровне, что и папка pages
, экспорт по умолчанию также не требуется.
вы можете проверить это официальную документацию предоставленную nextjs
а вы изменили его, чтобы сделать нормальный экспорт, и это не сработало?
Да, обычный экспорт по умолчанию не дал эффекта, только когда я изменил next.config.js.
Итак, через несколько дней я смог найти решение. Надеюсь, это поможет кому-то в будущем.
Если в next.config.js вы изменили расширения страниц, как я, на:
pageExtensions: ['page.tsx', 'api.ts'],
Мне пришлось добавить запись на обложку page.ts:
pageExtensions: ['page.tsx','page.ts', 'api.ts'],
Наконец добавили промежуточное ПО как middleware.page.ts на уровне страниц, и оно начало работать.
В целом, промежуточное программное обеспечение должно соответствовать расширениям страницы, определенным в next.config.js.
Итак, промежуточное ПО уже находится на том же уровне, что и страницы.