2011-12-05 86 views
0

我如何使用Node.js和快速的Web框架,我有一个问题与res.render()如何渲染只有一个视图?

我有这样的功能:

exports.init = function(){ 

    return function(req, res, next) { 

     /* FORM CONTACT */ 
     if (req.body.contact){      

      model.validateContact(function(e){    
       if (err) res.render('contacts', {'error': err}) 

       else { 
        model.sendContact(function(err){             
         if (err) 
          res.render('contacts', {'error': err})        
         else 
          res.redirect('/success')               
        })         
       }    
      })  

     } 
     /* CONTACT */  

     res.render('contacts') 
     console.log('after') 
    } 

} 

这里我有,因为res.render问题init函数中不存在(我指的是内部函数(validateCOntact和sendContact)中的res.render,所以最后的res.render('contacts')将始终执行。

为什么脚本正在继续其过程,如果我呈现一个页面?我怎么可能做res.render()多于一次?

谢谢

回答

1

试试这个:

exports.init = function() { 

    return function(req, res, next) { 
    /* FORM CONTACT */ 
    if (req.body.contact){ 
     model.validateContact(function(e) { 
     if (err) { 
      res.render('contacts', {'error': err}); 
     } else { 
      model.sendContact(function(err) { 
      if (err) { 
       res.render('contacts', {'error': err}); 
      } else { 
       res.redirect('/success'); 
      } 
      }); 
     } 
     }); 
    } else { 
     /* CONTACT */ 
     res.render('contacts'); 
     console.log('after'); 
    } 
    } 
} 
+0

是的,只有在这种情况下,它完美的作品。 – Dail

+0

无论如何,我会推荐'返回',否则你的主代码将总是被包装在'else'子句中。 –

+0

如果您确实只有1-2个以上的人,则返回更有用。 – alessioalex

0

只是return调用res.render()后。例如:

if (err){ 
    res.render('contacts', {'error': err}) 
    return 
} 
+0

我不能做回里面的内部函数,如果我这样做,我将“退出”从那里不是从main函数(初始化函数)。 – Dail

+0

是的,你可以,试试吧。 – alessioalex

+0

@Dali没错,虽然你只需要返回两次。 –

0

每次做res.redirectres.render你应该返回,因为如果不这样做,你会得到“后无法发送了头。”错误的时间,因为你会渲染另一个视图。

+0

我试过了,如果我在内部函数(validateContact或sendContact)内部使用res.render(或res.redirect)返回值,它就不起作用了。“错误:发送后不能使用可变头部API。因为最后的res.render将一直执行。 – Dail