2017-02-20 76 views
0

最初我嘗試使用router.postrouter.get方法,並讓它們在我的代碼中分開。發送相同的數據來查看POST和GET在node.js/Express.js

然後我選擇使用router.all,和相同的函數內分離POSTGET和使用兩個res.render和公共對象與所述可視數據它們都共享,因爲它會加載相同的屏幕。

我想知道如果這是一個好方法,以及如何這通常是在node.js中/ express.js完成:

router.all('/profile', function(req, res, next) { 
    var viewData = { 
     data1: Demo.getdata(1), 
     data2: Demo.getdata(2), 
     data3: Demo.getdata(3), 
     data4: Demo.getdata(4) 
    }; 

    if (req.method === 'POST') { 
     request.get({ 
      uri: res.locals.baseUrl + '/getData', 
      qs: { 
       param1: param1 
      } 
     }, function(error, response, body) { 
      if (error || response.statusCode != 200) { 
       viewData.message = 'There was a problem!!'; 
      } 
      else{ 
       var data = JSON.parse(body); 
       viewData.message = 'Good job!!'; 
       viewData.moreData= data.moreData; 
      } 
      res.render('settings/profile', viewData); 
     }); 

    } 
    else{ 
     res.render('settings/profile', viewData); 
    } 
}); 
+0

我建議保持它分開,因爲我大多數人看到人們明確定義特定路線上的方法並定義它們的回調或用例。如果你使用'router.all',那麼特定的路由將可用於所有的http方法。在一個回調中使用if-else會使你的代碼變得很髒。 –

+0

你會如何處理常見的數據。中間件?一個函數?在可讀性方面這不是那麼糟糕嗎? – Alvaro

+0

您可以使用最適合您的案例的中間件或功能。我個人使用中間件。 –

回答

1

我會建議你的情況是讓他們分開,因爲他們幾乎沒有任何共同點。

我會做什麼以避免複製/粘貼代碼是使router.post('/profile', ...)致電res.redirect("/profile");,以便它可以在需要時回退到GET

+0

POST修改我傳遞給視圖的數據。 (在他請求回調中看到) 據我所知,除非你[做某種破解],否則你不能傳遞重定向數據(http://stackoverflow.com/a/19038048/1081396)對我來說很醜!) – Alvaro

+0

難道你不想以任何方式保存數據嗎? – Telokis

+0

然後,您可以修改數據並將其傳遞到另一箇中間件。而這個中間件會執行'res.render'。這兩條路線('GET'和'POST')都會使用該中間件,但是在調用它之前'POST'會做一些事情。 – Telokis

相關問題