【发布时间】:2014-08-23 13:46:33
【问题描述】:
我正在设计一个客户端/服务器同步功能。客户端将一堆更改的事件发送到服务器。服务器将根据请求的项目状态进行创建、删除或修改。数据库操作完成后,服务器需要将摘要发送回客户端。
以下是我的服务器端代码的摘录,使用 mongoose 和 restify 设计。
var EventModel = mongoose.model('Event', eventSchema);
server.post("/sync", function (req, res, next) {
var events = req.params.events;
var created = [], deleted = [], updated = [];
events.forEach(function (elem) {
if (elem.status == 0) {
// Delete
EventModel.remove({ _id: elem.uuid }, function (err, event) {
if (!err) deleted.push({uuid: elem.uuid});
});
} else if (elem.status == 1) {
// Create and update uuid
var event = new EventModel(elem);
event.save(function (err, doc) {
if (!err) {
elem.uuid = event._doc._id;
created.push(elem);
}
});
} else if (elem.status == 2) {
// Update
EventModel.findOne({ _id: elem.uuid }, function (err, event) {
event.save(function (err, doc) {
if (!err) updated.push({uuid:elem.uuid});
});
});
}
});
// Notify client what are processed.
// PROBLEM: created, deleted, updated are always empty!
res.send({processed: {created: created, deleted: deleted, updated: updated}});
});
由于 mongoose 以异步方式执行 CRUD,因此响应 created、deleted 和 updated 始终为空。
有没有办法让猫鼬串联操作?
【问题讨论】:
-
你需要学习如何编写异步代码。特别是看
async.forEach,它会为你处理回调,让你在一切完成后运行。 -
谢谢@HarpreetSingh。异步工作完美。
-
我想知道,哪个链接适合你(第一个或第二个)?
标签: node.js mongoose synchronous restify