我正在使用Mongo,Node.JS和Angular开发一个应用程序 每次在前端传递和处理对象时,所有objectId都会转换为字符串(当我将其作为json发送时会自动发生),但是当我将对象保存回mongo时,我需要转换_id和其他集合的任何其他手动引用返回ObjectID对象。如果我想将数据库层与我的后端的其余部分很好地分开,它会变得更加混乱,让我们假设我的数据库层具有以下签名:
database.getItem(itemId, callback)
我希望我的后端业务将itemId视为不透明类型(即不要求使用mongo或了解有关此数据库层之外的ObjectId的任何内容),但同时我希望能够获取此结果功能并直接发送到 快递js的前端。
exports.getItem = function(req, res) {
database.getItem(req.params.id, function(err, item) {
res.json(item);
});
};
我现在最终做的是:
exports.getItem = function(itemId, callback) {
if (typeof itemId == 'string') {
itemId = new ObjectID(itemId);
}
var query = {_id: itemId};
items.findOne(query, callback);
};
这样它就可以处理来自后端的两个调用,其中itemId引用可能来自另一个对象,因此可能已经是正确的二进制格式,以及带有字符串itemId的请求。< / p>
正如我上面已经提到的,当我保存一个来自前端的对象并且包含许多对其他集合的手动引用时更加痛苦,因为我需要检查对象并将所有id字符串更改为的ObjectID。
这一切都感觉非常错误,必须有更好的方法来做到这一点。它是什么?
谢谢!