我想知道我是否需要尝试抓住来接收请求,如下所示?如果我使用ty..catch并且如果我也检查typeof,它是多余的吗?只使用try..catch会处理吗?
module.exports = function verifyToken(req, res, next) {
// Get auth header value
try {
var bearerHeader = req.headers['authorization'];
} catch (e) {
return res.sendStatus(403);
}
if (typeof bearerHeader == 'undefined') {
// Forbidden
return res.sendStatus(403);
}
//split at the space
const bearer = bearerHeader.split(' ');
// Get token from array
const bearerToken = bearer[1];
// Set the token
req.token = bearerToken;
next()
}
答案 0 :(得分:0)
只需几点。
var
(它有一个奇怪的范围)。始终使用let
或const
(只需在catch之外定义变量)。===
而不是==
req.headers
。与Node.Js中的python不同,您可以访问对象的非现有属性,以便删除第一个try catch。typeof
检查确定但是为了额外的安全性应该是string
if (bearer.length > 1) {...}
)因此在此特定代码中不需要try catch。请记住,您很可能必须编写异步代码,因此错误管理可能比简单try-catch
更复杂(除非您使用的是promises和async await
构造)。
答案 1 :(得分:0)
我没有看到在代码中捕获阻塞的情况。 (我假设你使用该功能作为中间件)。因此req.headers ['authorization']不会抛出异常。
const bearer = bearerHeader.split(''); 如果以上行不是标准方式,那么bearer [1]将是未定义的,在这种情况下,req.token将是未定义的,所以最好发送401响应