我需要一个中间件在我的nextjs项目,这是一个monorepo(前端和后端在同一个项目),我需要拦截通过中间件的请求,并做的东西,我基本上做的每一个API:我看了一下to this,但是我不知道如何得到实际的请求(头,体,查询字符串等)。
因此,我在/pages
文件夹下创建了文件_middleware.ts
,并执行以下操作:
import type { NextFetchEvent, NextRequest } from 'next/server';
import { NextResponse } from 'next/server';
export async function middleware(req: NextRequest, ev: NextFetchEvent) {
console.log('request - - -- - >', req);
}
我以为在req
参数中我有完整的请求,但事实上,如果我记录它,我会得到以下结果:
NextRequestHint [Request] {
sourcePage: '/_middleware',
[Symbol(internal body)]: { bodyInit: null, disturbed: false },
[Symbol(internal request)]: {
credentials: 'same-origin',
headers: BaseHeaders [Headers] { [Symbol(map)]: [Object] },
method: 'GET',
referrer: 'about:client',
redirect: 'follow',
url: NextURL { [Symbol(NextURLInternal)]: [Object] }
},
[Symbol(internal request)]: {
cookieParser: [Function: cookieParser],
geo: {},
ip: undefined,
page: { name: '/[user]', params: [Object] },
url: NextURL { [Symbol(NextURLInternal)]: [Object] }
}
}
有没有办法在这里得到完整的请求?或者有没有其他的方法来做一个中间件,我可以做我为每个API做的一般事情?谢谢。
版本下一个js:12.0.9
2条答案
按热度按时间c2e8gylq1#
NextRequest
类扩展了一个基于its native counterpart的Request
接口。您可以在以下文件中查看可用的不同属性:node_modules/next/dist/server/web/spec-extension/request.js
node_modules/typescript/lib/lib.dom.d.ts
访问它们的方式如下所示:
kgsdhlau2#
从几个月前开始,不赞成使用嵌套的
_middleware.ts
文件,而赞成使用位于项目根目录中的单个middleware.ts
文件。您可以在以下链接中找到更多信息:
https://github.com/vercel/next.js/pull/36772
https://nextjs.org/docs/messages/nested-middleware
此致!