NodeJS 和 ExpressJS 并行处理 rest 请求



我是JavaScript,NodeJS和Express的新手。我编写简单的应用程序,它执行以下操作

  1. 用户提出请求。
  2. 服务器进行多个休息调用并呈现响应。

如何确保所有调用都已完成,并创建可以发送给用户的对象?我看到人们说了一些关于async.parallel的事情。这是唯一的出路吗?任何例子都会有所帮助。

您可以使用 promise 按顺序运行代码。 这是我使用 promise 制作的登录功能的示例(稍微缩小)。

在一个名为LoginController的模块中,我放置了这段代码。

this.attemptLogin = function(body, res) {
var reason = "";
var user = null;
loginM.findUser(body.username)
.then(function(result) {
if (result.status) {
user = result.result[0];
return this.verifyPassword(body.password, result.result[0].Password);
} else {
reason = {status: false, message: "Incorrect username", result: null};
throw(reason);
}
})
.then(function(result) {
if (result.message) {
res.send({status: true, message: "Successfully logged in", result: user});
return;
} else {
reason = {status: false, message: "Incorrect password", result: null};
throw(reason);
}
}).catch(function(err) {
res.send(err);
});
}

在另一个名为LoginModel(LoginM)的模块中,我放置了此代码

this.findUser = function(username, email) {
return new Promise(function (resolve, reject) {
pool.getConnection(function (err, connection) {
if (err) {
reject({status: false, message: err});
} else {
connection.query('select Id, Name, Email, Password from Users ' +
'where (Users.Name = ? OR Users.Email = ?) AND Removed = 0 LIMIT 1', [username, email], function (err, rows) {
connection.release();
if (!err) {
if(rows.length > 0) {
resolve({status: true, message: "Found user", result: rows});
}
else 
resolve({status: false, message: null})
} else {
reject({status: false, message: err});
}
});
}
});
});
}

对于verifyPassword也返回承诺的类似方法。

现在,需要注意的是:

  • 每个then中的代码都是异步运行的

  • then部分按顺序执行,即,在从上一个then返回某些内容之前,您不会输入下一个then

  • 从返回承诺(findUserverifyPassword)的方法中resolve的任何内容都将作为名为result的变量传递.then(function(result)

最新更新