2011-12-05 129 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