【问题标题】:Node js - Express js code is executing after redirectNode js - Express js 代码在重定向后执行
【发布时间】:2013-11-22 04:33:43
【问题描述】:

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

部分伪代码

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
        }
    }
}

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

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);

TEMPORARILY UNAVAILABLE FUNCTION 中的 res.redirect 不应该阻止任何代码进一步向下执行吗?

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    不,不应该。

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

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

    return res.redirect(302, 'https://' + req.host + '/' + url);
    

    【讨论】:

    • 像 res.end() 这样的东西呢?我想我正在寻找类似于 next() 的东西,它基本上会停止对请求的所有进一步操作。
    • @JustinCloud next() 不会停止任何事情。代码也可以在它之后运行。
    • 是的,但是 next() 不会退出当前路由并继续下一个路由吗?
    • @JustinCloud 调用next() 函数不会退出任何东西,就像调用任何其他回调或函数不会一样。在next() 之后(或同时)返回也是一个好习惯。 return next()
    • @JustinCloud 好处是您可以退出当前功能,就像您期望的那样。
    猜你喜欢
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2017-04-08
    相关资源
    最近更新 更多