2013-11-22 47 views
3

我有一个express web应用程序。在应用程序中,我有一条路线可以对数据库进行多次调用。每次通话期间,如果失败,我会将浏览器重定向到一个页面/暂时不可用(基本上是一个通用的错误页面,不会让用户感到困惑,只是稍后再回来尝试)。Node js - Express js代码在重定向后执行

PORTION伪码的伪代码的暂时不可FUNCTION

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

Shoudn't在暂时不可用功能res.redirect防止任何代码

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

部的从进一步向下正在执行?

回答

11

不,不应该。

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

一种常见的做法,以避免这种情况是当你重定向或简单地返回,否则打电话要退出当前功能的回调:

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

什么像res.end()?我想我正在寻找类似于next()的东西,它基本上暂停了请求的所有进一步操作。 –

+0

@JustinCloud'next()'不会停止任何事情。代码也可以在它之后运行。 – Brad

+0

是的,但不next()退出当前的路线,并继续前进到下一个路线? –