2012-04-06 6 views
1

Ich verwende Express.js w/node.js und ich habe eine Route wie folgt aus:Express.js/node.js äquivalent zu beenden() in PHP

users.init(app.db, function() { 

     users.checkUsername(user.username, function(err, count) { 
      if (count > 0) { 
       res.json({'username': 'unavailable'}); 
      } 
     }); 

     users.checkEmail(user.email, function(err, count) { 
      if (count > 0) { 
       res.json({'email': 'unavailable'}); 
      } 
     }); 

     users.insertUser(user, function(err, response) { 
      res.json({'success' : 'true'}); 
     }); 

    }) 

Dies wird mehrere Antworten drucken senden, Benutzernamen und E-Mail zum Beispiel in einigen Fällen.

Diese Route wird über Ajax aufgerufen, in PHP, normalerweise mache ich eine exit(), nachdem ich eine JSON-Antwort aussprechen. Gibt es eine Möglichkeit, dies in Expressjs zu tun?

Vielen Dank!

EDIT: Ich könnte alles in If/Else wickeln oder eine Fahne in jedem setzen, aber nur sehen, ob es eine elegentere Weise ist.

Antwort

2

Sie können nicht "mehrere Antworten" (was immer das bedeutet) mit res.json - jedes Mal, wenn Sie es verwenden, sendet es die Daten an den Client und finalisiert die Antwort. Sie müssen das Ergebnis in einer Variablen halten (und aktualisieren) und es am Ende senden.

Jetzt kann ich denke an zwei Möglichkeiten für Sie:

  • Nested Rückrufe Ganz wirklich ärgerlich, aber manchmal notwendig (wenn zum Beispiel der zweite Aufruf richtet sich nach dem ersten Anruf);

  • Warteschlange für asynchrone Rückrufe Überprüfen Sie in Rückrufen, ob alle anderen Callbacks den Job beendet haben. Wenn ja, die Antwort. Dies kann ein bisschen schwierig sein, es selbst zu implementieren, also versuchen Sie zum Beispiel eine ausgezeichnete async Bibliothek.

+0

@freekish Ich ging voran und machte die verschachtelten Rückrufe - aber diese Async-Bibliothek ist süß! Ich muss es umstellen - vielen Dank! – dzm