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

标签 javascript node.js database server promise

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

相关文章:

java - 如何将对象插入到h2

mysql - 数据库关系(MySQL Workbench)

python - MongoDB 不使用allowDiskUsage :True 处理聚合

php - 如何在div中提交表单之前使用jquery显示上传图像预览

javascript - CSS 按字母顺序排序。我在哪里可以得到消息?

javascript - marginLeft 仅在调用两次时重置

javascript - 如何在node.js中使用Sinon/Mocha模拟变量

javascript - HTML5 历史 API 演示

javascript - 通过正则表达式进行 JSON 路由匹配

node.js - MLab 和环回 ACL - 有很多 (POST)