2017-02-20 64 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