我有一个应用程序,我不久前使用角度全栈生成器创建。一切都很好,直到我们需要升级我们的猫鼬以获得批量写入。好吧,当我们到达猫鼬 4.11.13(或 4.>8)时,我们的 socket.io 坏了。我不记得具体版本,但它大于 4.8 和 <5)。升级到 Mongoose 5.0.13 解决了套接字问题并具有批量写入功能,但是现在大多数更新在保存到 mongo 时都会抛出 500 错误:
类型错误:期望一个数组、一个承诺或一个可
请参见 https://github.com/petkaantonov/bluebird/wiki/Error:-expecting-an->数组,-一个承诺或一个然后
PUT/api/accounts/57488f5ac260210300c10d80 500 77.719 ms - 2
以下是导致错误的方法:
// Updates an existing Account in the DB
export function update(req, res) {
if (req.body._id) {
delete req.body._id;
}
Account.findByIdAsync(req.params.id)
.then(handleEntityNotFound(res))
.then(saveUpdates(req.body))
.then(responseWithResult(res))
.catch(handleError(res));
}
这是来自样板生成器
我已经通过删除其他内容将其缩小到saveUpdates(req.body)。数据库更新发生并持续存在,但
捕获错误。这是 saveUpdates 方法 - 同样来自生成器。
function saveUpdates(updates) {
return function(entity) {
var updated = _.merge(entity, updates);
return updated.saveAsync()
.spread(updated => {
return updated;
});
};
}
我想我已经接近找到其他接近的解决方案,我已经尝试过它们,但它无助于解决错误。
有人以前遇到过这个,或者知道如何重构它以便能够使用最新的猫鼬吗?
@Roamer-1888 我解决了这个问题。从角度全栈生成器中,原始样板代码在猫鼬 5 中不起作用。
最初的样板保存更新()是这样的:
function saveUpdates(updates) {
return function(entity) {
var updated = _.merge(entity, updates);
return updated.saveAsync()
.spread(updated => {
return updated;
});
};
}
根据 pm @Roamer-1888 的注释,我进行了以下更改,500 错误消失了:
function saveUpdates(updates) {
return function(entity) {
return _.merge(entity, updates).saveAsync()
.then(updated => updated);
};
}
问题解决了!谢谢你 @Roamer-1888