2012-04-06 3 views
1

Я использую Expressjs ж/Node.js и у меня есть маршрут, как это:Expressjs/node.js эквивалент выхода() в 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'}); 
     }); 

    }) 

Это будет печатать отправить несколько ответов, имя и электронную почту например, в некоторых случаях.

Этот маршрут вызывается через ajax, в php, я обычно делаю exit() после того, как я выхожу из ответа json. Есть ли способ сделать это в Expressjs?

Спасибо!

EDIT: Я мог бы обернуть все в if/else или установить флаг внутри каждого, но просто посмотреть, есть ли более элегантный способ.

ответ

2

Вы не можете выполнять «множественные ответы» (независимо от того, что это означает) с помощью res.json - каждый раз, когда вы его используете, он отправляет данные клиенту и завершает ответ. Вам нужно удержать (и обновить) результат в переменной и отправить его в самом конце.

Теперь я могу думать о 2 возможности для Вас:

  • Вложенные функции обратного вызова Очень раздражает, но на самом деле иногда необходимо (если, например, второй вызов зависит от первого звонка);

  • Асинхронная очередь обратных вызовов В обратных вызовах проверяют, завершил ли каждый другой обратный вызов задание. Если так, ответьте. Возможно, это немного сложно реализовать, поэтому попробуйте, например, библиотеку excelent async.

+0

@freekish Я пошел вперед и сделал вложенные обратные вызовы, но эта библиотека Async сладка! Я должен переключить его - большое спасибо! – dzm

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