节点js - 重定向后正在执行Express js代码

Jus*_*oud 3 node.js express

我有一个快速的网络应用程序.在应用程序中,我有一个路由,可以对数据库进行多次调用.在每次调用期间,如果它失败,那么我将浏览器重定向到页面/暂时不可用(基本上是一个通用错误页面,不会让用户失望,只是说稍后再试).

伪代码的部分内容

app.get('/sign-in/twitter', function(req, res, next){
    request({
        'method' : 'GET',
        // BLAH BLAH BLAH CALL TO DATABASE
        // DATABASE CALLBACK
        function (error, response, body){
            if (response.statusCode === 200) {
                // DO GOOD STUFF
            }
            else if (response.statusCode === 404) {
                // DO COOL STUFF
            }
            else {
                temporarilyUnavailable(req, res, next);
            }
            // DO MORE STUFF AND SEND A RESPONSE
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用于暂时不可用功能的伪代码的部分

res.set({
    'Cache-Control' : 'private, no-cache, no-store, must-revalidate,
    'Content-Type' : 'text/plain;charset=utf-8',
}

res.redirect(302, 'https://' + req.host + '/' + url);
Run Code Online (Sandbox Code Playgroud)

在TEMPORARILY UNAVAILABLE FUNCTION中,res.redirect是否阻止执行下一代码?

Bra*_*rad 12

不,它不应该.

你只是在响应上调用一个函数.它下面的代码可以执行.没有什么神奇的res.redirect().

避免这种情况的常见做法是在重定向或以其他方式调用要退出当前函数的回调时返回:

return res.redirect(302, 'https://' + req.host + '/' + url);
Run Code Online (Sandbox Code Playgroud)

  • @JustinCloud调用`next()`函数不会退出任何东西,就像调用任何其他回调或函数一样.在(或)`next()`之后返回也是一种好习惯.`return next()` (3认同)
  • @JustinCloud好处是你退出当前函数,就像你期望的那样. (2认同)