我是否需要尝试...抓住请求?

时间:2018-05-24 13:48:49

标签: node.js request try-catch

我想知道我是否需要尝试抓住来接收请求,如下所示?如果我使用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()
    }

2 个答案:

答案 0 :(得分:0)

只需几点。

  1. 除非你使用的是古代版本的node.js,否则永远不要使用var(它有一个奇怪的范围)。始终使用letconst(只需在catch之外定义变量)。
  2. 始终使用===而不是==
  3. 如果您使用的是快递等库,则可以假定始终设置req.headers。与Node.Js中的python不同,您可以访问对象的非现有属性,以便删除第一个try catch。
  4. typeof检查确定但是为了额外的安全性应该是string
  5. 然后,您应检查拆分是否返回了两个元素(if (bearer.length > 1) {...}
  6. 因此在此特定代码中不需要try catch。请记住,您很可能必须编写异步代码,因此错误管理可能比简单try-catch更复杂(除非您使用的是promises和async await构造)。

答案 1 :(得分:0)

我没有看到在代码中捕获阻塞的情况。 (我假设你使用该功能作为中间件)。因此req.headers ['authorization']不会抛出异常。

const bearer = bearerHeader.split(''); 如果以上行不是标准方式,那么bearer [1]将是未定义的,在这种情况下,req.token将是未定义的,所以最好发送401响应