2017-02-20 2 views
0

Zunächst habe ich versucht, die router.post und router.get Methoden zu verwenden und sie in meinem Code getrennt haben.Senden Sie dieselben Daten zur Ansicht in POST und GET in node.js/Express.js

Dann entschied ich mich router.all, und in derselben Funktion POST und GET trennen und res.render und ein gemeinsames Objekt mit dem Bildschirmtextsystem sie beide teilen verwenden, um zwei zu verwenden, da sie den gleichen Bildschirm geladen werden.

Ich frage mich, ob dies ein guter Ansatz es ist und wie dies in der Regel in node.js/Express.js getan:

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

Ich schlage vor, es getrennt zu halten, da ich meistens Menschen gesehen habe, die Methoden auf bestimmten Routen explizit definieren und ihre Rückrufe oder Anwendungsfälle definieren. Wenn Sie 'router.all' verwenden, ist diese bestimmte Route für alle HTTP-Methoden verfügbar. Die Verwendung von und if-else in diesem einen Callback macht Ihren Code schmutzig. –

+0

Was würden Sie mit den gemeinsamen Daten machen? Eine Middleware? Eine Funktion? Ist das nicht auch schlechter in Bezug auf die Lesbarkeit? – Alvaro

+0

Sie können eine Middleware oder Funktion verwenden, die am besten zu Ihnen passt. Ich persönlich benutze Middleware. –

Antwort

1

Was würde ich in Ihrem Fall vorschlägt, wird sie getrennt zu halten, weil Sie haben nichts (fast) gemeinsam.

Was ich tun würde, um zu vermeiden, Kopieren/Einfügen Code ist router.post('/profile', ...) Anruf res.redirect("/profile");, so dass es fallback auf die GET bei Bedarf.

+0

Der POST ändert die Daten, die ich an die Ansicht übergebe. (wie in der Anfrage Rückruf) Soweit ich weiß, können Sie Daten über eine Weiterleitung nicht weitergeben, es sei denn Sie [eine Art von Hack] (http://stackoverflow.com/a/19038048/1081396) (das sieht hübsch aus hässlich zu mir!) – Alvaro

+0

Wollen Sie die Daten in keiner Weise speichern? – Telokis

+0

Dann könnten Sie die Daten ändern und vielleicht an eine andere Middleware weitergeben. Und diese Middleware würde den 'res.render' machen. Beide Routen ('GET' und' POST') würden diese Middleware verwenden, aber 'POST' würde einige Dinge tun, bevor es aufgerufen wird. – Telokis

Verwandte Themen