javascript - 尝试从猫鼬保存返回承诺时出错
问题描述
我正在使用mongoose
和express
内node
。
我遇到了嵌套承诺的问题,无法弄清楚为什么会这样。
路线- /loans
router.post('/problems/add', (req, res, next) => {
// error checking
req.headers.api = 'true';
let required = ['loan', 'item', 'type', 'quantity', 'description'];
let problems = [];
required.forEach(r => {
if (!req.body[r]){
problems.push(`Field '${r}' was not supplied`);
}
});
if (problems.length > 0){
res.json({success: false, message: `Couldn't create problem:\n${problems.join('\n')}`});
} else {
// Important part
loanController.addProblem(req.body)
.then((newProblem) => { // line 118 mentioned in error message
res.json({success: true, problem: newProblem});
})
.catch(err => {
return next(err);
})
}
});
控制器- 贷款控制器
exports.addProblem = (body) => {
Loan.findById(mongoose.Types.ObjectId(body.loan)).exec()
.then(foundLoan => {
if (!foundLoan){
throw new Error('loan not found');
}
let newProblem = new Problem({
loan: foundLoan._id,
item: mongoose.Types.ObjectId(body.item),
type: body.type,
quantity: body.quantity,
status: 'new',
text: body.description
});
return newProblem.save(); // newProblem is a valid mongoose document
})
.catch(err => {
return Promise.reject(err);
});
}
我收到以下错误,它没有被任何这些 catch 块捕获,并且来自我的一般错误捕获:
“TypeError:无法读取 router.post 处未定义的属性 'then' (c:\dev....\loans.js:118:5)
现在,当我在 处设置断点时newProblem.save()
,它显示newProblem
为有效的 Mongoose 文档,这些文档被正确保存。我什至可以newProblem.save().then()
从调试命令行调用。
我假设我在某处犯了错误,但这与其他对象的结构相似,并且它们工作正常。
谁能发现我犯的错误或建议进一步调查的方法?
解决方案
推荐阅读
- sql - 在 SQL 中计算两年之间的人口差异?
- css - 如何丢弃特定标签内的全局选择器规则?
- scripting - 检查数组 Google 表格脚本中是否存在该值?
- linux - 使用未安装的 KDE 框架和 Qt Creator
- javascript - 在 index.html 中获取用户的表单输入后,如何将图像渲染到 display.html?
- r - 蜱虫分布不均
- python - 如何避免python代码中的重复?
- python - 向选项卡小部件添加网格布局会更改内部小部件的间距和大小
- algorithm - 在基于 DCEL/半边的图中动态添加边?
- elasticsearch - 在 Elasticsearch Java API 中编辑 SearchSourceBuilder