使用数据库和服务器的承诺
问题描述:
我仍在学习js,但我试图在nodejs中编写一个基本的服务器。 服务器应该接受查询,然后从数据库返回JSON。使用数据库和服务器的承诺
我试图使用承诺,但可以得到我的头。 我的服务器返回一个空的答复。 那么我做错了什么?
我的服务器上的文件至今(简体):
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;
});
}
答
我的服务器返回一个空应答。那么我做错了什么?
您的dbRes
将会是undefined
,因为您期待异步承诺执行的响应。只有在承诺解决后您才需要发送回复。
使这改变了代码
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);
此外,您还需要在数据库执行部分返回承诺。
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);
});
});
};
Thx ill试试看,=>符号是什么意思? – ortusolis
这是一个较短的函数,不绑定'this'。例如,你可以检查[mdn](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions) – Sridhar
好吧,我明白,ty – ortusolis