嘿伙計們,當我嘗試修改快速中間件中的 req.url 時,我遇到了錯誤“[ERR_HTTP_HEADERS_SENT]:無法在將標頭發送到客戶端后設定標頭”。
我的中間件
export function ModifyQueryMiddleware(config, Authconfig, Repo ){
const accessTokenMap = new Map();
return async (request, res, next) => {
const accessToken = request.header('authorization') as string;
if(!accessToken){
throw new HttpException(res, 403)
}
if(!accessTokenMap.get(accessToken)){
const JWKS = jose.createRemoteJWKSet(new URL(config.jkwsUri));
try {
const jwtVerifyResult = await jose.jwtVerify(accessToken.replace('Bearer ', ''), JWKS);
const {payload} = jwtVerifyResult;
accessTokenMap.set(accessToken, payload)
const aumParams = await authentication(payload, authConfig,Repo);
const queryRestrictionStrategy = QueryRestrictionStrategyFactory(aumParams, request)
queryBuilder(queryRestrictionStrategy)
next()
} catch(err){
}
}
const payload = accessTokenMap.get(accessToken);
const aumParams = await authentication(payload, authConfig, repo);
const queryRestrictionStrategy = QueryRestrictionStrategyFactory(aumParams, request)
queryBuilder(queryRestrictionStrategy)
next()
}
}
我的查詢生成器:
export function queryBuilder(strategy: QueryRestrictionStrategy){
const {req, id} = strategy
if(req.url === '/someurl'){
req.url = `/someurl?${id}`
}
return
}
我真的很困惑,因為我沒有修改回應的標頭,而是在沒有查詢構建器的情況下修改查詢,中間件可以正常作業。我已經看過一些關于這個錯誤的問題,但是 res 總是在那里修改。
任何幫助或提示將不勝感激!
uj5u.com熱心網友回復:
當為真時,您的代碼可以呼叫next
兩次。!accessTokenMap.get(accessToken)
一旦處理了這部分代碼,您就必須回傳:
if (!accessTokenMap.get(accessToken)) {
const JWKS = jose.createRemoteJWKSet(new URL(config.jkwsUri));
try {
...
next();
} catch(err) {
next(err); // make sure to pass the error along!
}
return;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/507656.html
下一篇:Nodejs上的回應正文鍵不完整