解决 NodeJS (Express) 和 Eslint 的 return 值问题?
Solve return value issue for NodeJS (Express) and Eslint?
module.exports = function protectedRoute(request, response, next) {
const token = request.headers.authorization;
if (!token) {
return response.status(401).json({ message: 'invalid or token missing' });
}
const accessToken = token.split(' ')[1];
jwt.verify(accessToken, 'access', (error, user) => {
if (error) {
response.status(401).json({ message: 'User not authenticated' });
} else {
request.user = user;
next();
}
});
};
Eslint 给出了一个错误:“预期函数结束时的 return 值”。现在我解决了这个问题:
return null; // at the end of the function
但我想 return 一些有意义的东西,例如:
return response.status(503).json({ message: 'service unavailable' });
但是这个 return 在 API 调用时出错:“将它们发送到客户端后无法设置 headers”
关于如何处理这个问题有什么建议吗?
像这样的middleware function的return值从来没有检查过,所以不需要return任何东西。满足eslint,return null;
即可。
您的“有意义的”return 语句的问题在于它 同步地 向客户端发送独立于 jwt.verify
语句的结果的响应.此结果在 (error, user) => ...
回调函数中 异步处理 。所以发生的事情是:首先发送 503 响应和“服务不可用”消息,然后
- 发送带有“用户未通过身份验证”的 401 响应(如果回调具有
error
)
- 或者调用下一个中间件并将尝试发送响应。
在这两种情况下,第二个响应的 headers 是在第一个响应已发送之后设置的,因此会出现错误。发送两个回复当然没有意义。
module.exports = function protectedRoute(request, response, next) {
const token = request.headers.authorization;
if (!token) {
return response.status(401).json({ message: 'invalid or token missing' });
}
const accessToken = token.split(' ')[1];
jwt.verify(accessToken, 'access', (error, user) => {
if (error) {
response.status(401).json({ message: 'User not authenticated' });
} else {
request.user = user;
next();
}
});
};
Eslint 给出了一个错误:“预期函数结束时的 return 值”。现在我解决了这个问题:
return null; // at the end of the function
但我想 return 一些有意义的东西,例如:
return response.status(503).json({ message: 'service unavailable' });
但是这个 return 在 API 调用时出错:“将它们发送到客户端后无法设置 headers”
关于如何处理这个问题有什么建议吗?
像这样的middleware function的return值从来没有检查过,所以不需要return任何东西。满足eslint,return null;
即可。
您的“有意义的”return 语句的问题在于它 同步地 向客户端发送独立于 jwt.verify
语句的结果的响应.此结果在 (error, user) => ...
回调函数中 异步处理 。所以发生的事情是:首先发送 503 响应和“服务不可用”消息,然后
- 发送带有“用户未通过身份验证”的 401 响应(如果回调具有
error
) - 或者调用下一个中间件并将尝试发送响应。
在这两种情况下,第二个响应的 headers 是在第一个响应已发送之后设置的,因此会出现错误。发送两个回复当然没有意义。