如何只渲染一个视图?

时间:2011-12-05 21:59:38

标签: node.js express

我正在使用Node.JS和Express 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')
    }

}

这里有一个问题,因为init函数中不存在res.render(我引用内部函数内部的res.render(validateCOntact和sendContact),因此将始终执行最后一个res.render('contacts')

如果我渲染页面,为什么脚本会继续其进程?我怎么可能做res.render()多次?

谢谢

3 个答案:

答案 0 :(得分: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');
    }
  }
}

答案 1 :(得分:0)

致电return后,只需res.render()。例如:

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

答案 2 :(得分:0)

每次您执行 res.redirect res.render 时,您都应该返回,因为如果您不这样做,您将获得“之后无法发送标头” ..“错误,因为你将渲染另一个视图。