Javascript Node.js RESTful api。发文后的回应

Javascript Node.js RESTful api。发文后的回应,javascript,node.js,Javascript,Node.js,学习Node.js并尝试创建rest api。 现在有这样的服务: this.get = function(res) { connection.acquire(function(err, con) { con.query('select * from todo_list', function(err, result) { con.release(); res.send(result); }); });

学习Node.js并尝试创建rest api。 现在有这样的服务:

this.get = function(res) {
    connection.acquire(function(err, con) {
        con.query('select * from todo_list', function(err, result) {
            con.release();
            res.send(result);
        });
    });
};

this.create = function(todo, res) {
    connection.acquire(function(err, con) {
        con.query('insert into todo_list set ?', todo, function(err, result) {
            con.release();
            if (err) {
                res.send({
                    status: 1,
                    message: "Todo creation failed"
                });
            } else {
                res.send({
                    status: 0,
                    message: "Todo created successfully"
                });
            }
        });
    });
};
问题:如何在成功创建时返回json,例如:

{status: 0, message: ... , todos: [{id:1, name: 'Todo', date:...},{id:2, name: 'Todo', date:...}]}
使用:

为了在响应中包含todo项,您必须进行另一个数据库调用。与复制获取所有todo项的代码不同,您可能希望创建一个单独的函数来获取todo项,而无需响应客户端

this.getAllItems = function(callback) {
  connection.acquire(function(err, con) {
    con.query('select * from todo_list', function(err, result) {
      con.release();
      callback(result);
    });
  });
}

this.get = function (res) {
  this.getAllItems(function(result) {
    res.json(result);
  });
};

this.create = function (todo, res) {
  var self = this;
  connection.acquire(function(err, con){
    con.query('insert into todo_list set ?', todo, function(err, result){
      con.release();
      if(err) {
        res.json({status: 1, message: "Todo creation failed"});
      } else {
        self.getAllItems(function(items) {
          res.json({
            status: 0, 
            message: "Todo created successfully",
            todos: items
          });
        });
      }
    });
  });
};
不过,不要忘记添加错误处理。=)


此外,请查看承诺(例如)以避免回调地狱。

但我还需要将所有保存的项目添加到该json。在这种情况下,您可能需要在成功插入后发出
SELECT
数据库请求。您正在使用哪个数据库库?节点mysql。哦,没有其他办法了,只要成功了,再给db打个电话,然后回复?恐怕是这样。插入一行,对吗?然后,您应该能够使用
result.insertId
获取插入行的id。或者,如果您想返回所有待办事项,而不是仅返回插入的待办事项,只需使用
SELECT*FROM todo_list
this.getAllItems = function(callback) {
  connection.acquire(function(err, con) {
    con.query('select * from todo_list', function(err, result) {
      con.release();
      callback(result);
    });
  });
}

this.get = function (res) {
  this.getAllItems(function(result) {
    res.json(result);
  });
};

this.create = function (todo, res) {
  var self = this;
  connection.acquire(function(err, con){
    con.query('insert into todo_list set ?', todo, function(err, result){
      con.release();
      if(err) {
        res.json({status: 1, message: "Todo creation failed"});
      } else {
        self.getAllItems(function(items) {
          res.json({
            status: 0, 
            message: "Todo created successfully",
            todos: items
          });
        });
      }
    });
  });
};