gpt4 book ai didi

javascript - 对数据库和服务器使用 Promise

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:02 24 4
gpt4 key购买 nike

我还在学习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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com