typescript - Skicka en variabel från next.js-mellanmjukvara till api-förfrågan
Jag försöker skicka en middleware-variabel till mina API-sidor genom "req" men det fungerar inte
Jag försökte skicka användartoken till sidor med hjälp av "req", men det returnerar alltid null
mitt middleware: pages/api/users/_middleware.ts
import { NextRequest, NextResponse } from 'next/server';
import { getAccessToken } from '@lib/auth';
declare module 'next/server' {
interface NextRequest {
token: string;
}
}
export async function middleware(req: NextRequest) {
try {
const [, token] = await getAccessToken(req.headers.get('authorization'));
req.token = token;
return NextResponse.next();
} catch(e) {
const err = e as Error;
const errorPayload = {
error: 'unauthorized',
error_message: err.message,
};
return new Response(
JSON.stringify(errorPayload),
{ status: 401 },
);
}
}
min API-sida som jag försökte få användartoken från req: pages/api/users/[userId].ts
import { NextApiRequest, NextApiResponse } from 'next';
import { UserModel } from '@database/models';
declare module 'next' {
interface NextApiRequest {
token: string;
}
}
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
const user = await UserModel.findOne({ token: req.token });
res.status(200).send({
success: true,
user,
});
Svar #1
Du kan inte göra detta med next.js-middleware just nu. Om du använde express-middleware är det möjligt med res.locals
res.locals
Ett objekt som innehåller svarslokala variabler som är begränsade till förfrågan, och därför endast är tillgängliga för de vy(er) som renderas under den förfrågan/svar-cykeln (om några). Annars är denna egenskap identisk med app.locals.
Denna egenskap är användbar för att exponera information på begärandenivå, såsom begärans sökvägsnamn, autentiserad användare, användarinställningar och så vidare.
app.use((req, res, next) => {
res.locals.path = req.path;
next();
});
next.js-middleware har ingen res, att lägga till lokala variabler direkt på request-objektet stöds inte. Detta är fel:
export default async function handler(req: NextApiRequest, res: NextApiResponse) {}
next.js-middleware tar req och ev
export default async function handler(req,ev) {
console.log({req,ev})
}
