Нужно ли попробовать ... поймать на запросы? - PullRequest
0 голосов
/ 24 мая 2018

Я хотел бы знать, нужна ли мне попытка ... поймать для входящих запросов с, как в следующем сценарии?И это избыточно, если я использую 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 голосов
/ 25 мая 2018

Я не вижу сценария, в котором можно поймать блок в вашем коде.(Я предполагал, что вы используете эту функцию в качестве промежуточного программного обеспечения).Поэтому req.headers ['authorization'] не сгенерирует исключение.

const bearer = bearerHeader.split ('');если строка выше не стандартным способом, то канал-носитель [1] будет неопределенным, в этом случае req.token будет неопределенным, поэтому лучше отправить 401 ответ для этого

0 голосов
/ 24 мая 2018

Всего несколько баллов.

  1. Если только вы не используете старые версии node.js, никогда не пользуйтесь var (который имеет странную область видимости).Всегда используйте let или const (просто определите переменную с помощью let вне улова).
  2. Всегда используйте === over ==
  3. Если вы используете библиотеку, такую ​​какэкспресс, вы можете предположить, что req.headers всегда установлен.В отличие от python в Node.Js, вы можете получить доступ к несуществующим свойствам объекта, чтобы вы могли удалить первый пробный улов.
  4. Проверка typeof в порядке, но для дополнительной безопасности должна быть string
  5. Затем следует проверить, вернул ли разделение два элемента (if (bearer.length > 1) {...})

Таким образом, нет необходимости в попытке перехвата в этом конкретном коде.Помните, что вам, скорее всего, придется писать асинхронный код, поэтому управление ошибками может быть более сложным, чем простой try-catch (если вы не используете обещания и async await конструкции).

...