首页 > 解决方案 > Console.log 调用在响应请求后运行

问题描述

我有这个中间件,如果没有找到令牌,请求就会响应,这就是发生的情况,但是 console.log 行在请求响应后仍然运行。为什么会这样?我一直认为 res.json 调用会“结束”中间件。提前致谢。

const jwt = require("jsonwebtoken")
const config = require("../../utils/config")

const requireAuthenticated = (req, res, next) => {
    const token = req.headers.authorization

    if (!token) {
        res.status(400).json({ error: 'Token required' })
    }

    console.log(jwt.verify(token, config.JWT_SECRET))
}

module.exports = requireAuthenticated

标签: javascriptnode.jsexpress

解决方案


好吧,它就是 Javascript 的工作原理。调用函数时,没有特殊的方法可以知道函数执行是否完成/未完成。它只是运行完整的功能。但是,您可以随时退出该功能。

您可以return在条件失败后使用语句停止执行

选项1:return在 res.json() 之后添加。

if (!token) {
    res.status(400).json({ error: 'Token required' });
    return;
}

选项 2:您也可以返回 res.json()

if (!token) {
    return res.status(400).json({ error: 'Token required' })
}

推荐阅读