只是想问一下
到达入口点后,我收到此错误消息
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:372:5)
at ServerResponse.setHeader (node:_http_outgoing:576:11)
at ServerResponse.header (C:\Users\mmeeee\Desktop\REACT_APP\node_modules\express\lib\response.js:794:10)
at ServerResponse.send (C:\Users\mmeeee\Desktop\REACT_APP\node_modules\express\lib\response.js:174:12)
at ServerResponse.json (C:\Users\mmeeee\Desktop\REACT_APP\node_modules\express\lib\response.js:278:15)
at C:\Users\mmeeee\Desktop\REACT_APP\backend\controllers\userController.js:27:9
at processTicksAndRejections (node:internal/process/task_queues:96:5)
我尝试用 res.end 替换 res.json,但似乎不是这里的问题。
在该
protected
中间件中,您正在调用 next
,这可能会产生在 try
块中向客户端发送响应的副作用。您还将在 catch
块中向客户端发送响应。在执行这两个块之后,您不应该尝试进一步修改响应,如果您最终没有 token
,则应这样做。潜在的重构:
if (
req.headers.authorization &&
req.headers.authorization.startsWith("Bearer")
) {
try {
const token = req.headers.authorization.split(" ")[1];
if (!token) throw 'No token!'
const decoded = theCodeYouWrote(token);
req.user = await theCodeYouWroteForTheUser(decoded);
} catch (error) {
console.error(error);
res.status(401).json(...);
return;
}
}
next();