2017-02-20 7 views
0

Первоначально я попытался использовать методы router.post и router.get и разделить их в моем коде.Отправить те же самые данные для просмотра в POST и GET в node.js/Express.js

Тогда я решил использовать router.all, и в пределах одной и той же функции разделения POST и GET и использовать два res.render и общий объект с ViewData они оба разделяют, так как она будет загружать тот же экран.

мне интересно, если это хороший подход к нему, и, как это обычно делается в 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

 Смежные вопросы

  • Нет связанных вопросов^_^