I’m using Expressjs w/ node.js and I have a route like this:
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'});
});
})
This will print send multiple responses, username and email for example, in some cases.
This route is being called via ajax, in php, I normally do an exit() after I echo out a json response. Is there a way to do that in Expressjs?
Thank you!
EDIT: I could wrap everything in if/else or set a flag inside each, but just seeing if there’s a more elegent way.
You can’t do “multiple responses” (whatever that means) with
res.json– every time you use it, it sends the data to the client and finalizes the response. You need to hold (and update) the result in a variable and send it at the very end.Now I can think of 2 possibilities for you:
Nested callbacks Quite annoying actually but sometimes necessary (if for example the second call depends on the first call);
Asynchronous callbacks queue In callbacks check if every other callback finished the job. If so do the response. This may be a bit tricky to implement it yourself, so try for example an excelent async library.