我还在学习js,但我正在尝试用nodejs编写一个基本的服务器。 服务器应该接受查询,然后从数据库返回 JSON。
我正在尝试使用 promise ,但可以解决这个问题。 我的服务器返回空回复。 那么我做错了什么?
到目前为止我的服务器文件(简化):
http.createServer(function (request, response) {
if (request.method === "GET") {
...
var dbRes = dbFunc.getFromDB(query);
response.statusCode = 200;
response.setHeader('Content-Type', 'application/json');
response.end(JSON.stringify(dbRes));
}
}).listen(port);
到目前为止我的数据库文件(简化):
exports.readHandeler = function (query) {
var promise = new Promise(function(resolve, reject) {
db.collection('data').find(query).toArray(function(err, res) {
if (err) {
throw err;
reject(-1);
}
resolve(res);
}
});
promise.then(function(result) {
return result;
}, function(err) {
return -1;
});
}
最佳答案
My server returns an empty reply. So what am i doing wrong?
您的dbRes
将是未定义
,因为您期望异步 promise 执行的响应。您只需要在 promise 解决后发送响应。
对您的代码进行此更改
http.createServer(function (request, response) {
if (request.method === "GET") {
...
dbFunc.getFromDB(query).then((dbRes) => {
response.statusCode = 200;
response.setHeader('Content-Type', 'application/json');
response.end(JSON.stringify(dbRes));
}).catch((err) => {
console.log('err', err.stack);
});
}
}).listen(port);
此外,您需要在数据库执行部分返回Promise。
exports.readHandeler = function (query) {
return new Promise(function (resolve, reject) {
db.collection('data').find(query).toArray(function (err, result) {
if (err) {
return reject(err); // or -1 based on your need
}
return resolve(result);
});
});
};
关于javascript - 对数据库和服务器使用 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46721652/