升级到猫鼬 5.0.13 - 从蓝鸟错误中获取角度全栈生成的 500 应用程序错误:错误:期望一个数组,一个承诺



我有一个应用程序,我不久前使用角度全栈生成器创建。一切都很好,直到我们需要升级我们的猫鼬以获得批量写入。好吧,当我们到达猫鼬 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

最新更新