学习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:...}]}
答案 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)以避免回调地狱。