Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何仅渲染一个视图?_Node.js_Express - Fatal编程技术网

Node.js 如何仅渲染一个视图?

Node.js 如何仅渲染一个视图?,node.js,express,Node.js,Express,我正在使用Node.JS和Express web framework,但res.render()有问题 我有这个功能: exports.init = function(){ return function(req, res, next) { /* FORM CONTACT */ if (req.body.contact){ model.validateContact(funct

我正在使用Node.JS和Express web framework,但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(我指的是内部函数(validateCOntact和sendContact)中的res.render),所以最后一个
res.render('contacts')
将始终执行

如果我呈现一个页面,为什么脚本会继续它的过程?我怎么可能多次执行res.render()


谢谢

在调用
res.render()
后返回

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

每次执行res.redirectres.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');
            }
          });
        }
      });
    } else {
      /* CONTACT */
      res.render('contacts');
      console.log('after');
    }
  }
}

我无法在内部函数中进行返回,如果我这样做,我将从那里“退出”,而不是从主函数(init函数)。@Dali对,没有注意到这一点,尽管您只需要返回两次。我尝试过,如果在内部函数(validateContact或sendContact)中的res.render(或res.redirect)上使用return,它将不起作用我得到“错误:发送后不能使用可变头API”。因为最后的res.render将始终执行。我建议在获得错误后返回
return
,否则主代码将始终包装在
else
子句中。如果只有1-2个else if,则返回更有用。