Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Console.log调用在响应请求后运行_Javascript_Node.js_Express - Fatal编程技术网

Javascript Console.log调用在响应请求后运行

Javascript Console.log调用在响应请求后运行,javascript,node.js,express,Javascript,Node.js,Express,我有一个中间件,如果没有找到令牌,请求就会响应,这就是发生的情况,但是console.log行在请求响应后仍然运行。为什么会这样?我一直认为res.json调用将“结束”中间件。提前谢谢 const jwt = require("jsonwebtoken") const config = require("../../utils/config") const requireAuthenticated = (req, res, next) => {

我有一个中间件,如果没有找到令牌,请求就会响应,这就是发生的情况,但是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

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

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

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

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


返回res.status(400).json({error:'tokenrequired'});如果这是您想要的,将终止执行。是什么让您相信在调用
res.json(…)
时执行将结束,而不使用
返回
语句?谢谢Adil,很好,我在谷歌上搜索了一下,发现这很有帮助。
if (!token) {
    res.status(400).json({ error: 'Token required' });
    return;
}
if (!token) {
    return res.status(400).json({ error: 'Token required' })
}