Node.js RESTful api。发布后的回复

时间:2016-05-22 12:41:56

标签: 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);
        });
    });
};

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:...}]}

1 个答案:

答案 0 :(得分:1)

使用res.json()

res.json({status: 0, message: "Todo created successfully"});

为了在响应中包含待办事项,您必须再次进行数据库调用。您可能希望创建一个单独的函数来获取待办事项而不响应客户端,而不是复制代码以获取所有待办事项。

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
          });
        });
      }
    });
  });
};

不要忘记添加错误处理。 =)

另外,查看promises(例如Bluebird)以避免回调地狱。