我正在尝试将新条目添加到集合中,由于某种原因,我现在遇到此错误! TypeError: newForm.save(...).exec is not a function
我遵循了this answer,但是由于某种原因,它不起作用了,我最终转而使用en es6 promise,并且效果很好。
如果我能得到解释,说明甚至需要.exec()还是坚持承诺猫鼬。
.exec()here的文档。
const express = require('express');
const router = express.Router();
const Forms = require('../models/formschema');
const checkAuth = require('../middleware/check-auth');
router.post('/saveForms/',checkAuth,(req,res)=>{
const clientID = res.locals.dataToken.ClientID;
const formData = req.body;
newForm = new Forms({
clientID,
formData: {
formName : formData.formName,
components : JSON.stringify(formData.components)
}
}
// This doesn't work
newForm.save(newForm).exec(function (err,res){
if (err) {
res.status(200).json(err);
}
res.status(200).json(res);
})
// but this does
newForm.save().then(result =>{
console.log(result);
res.status(200).send(result);
})
.catch(err => {
console.log(err);
res.status(200).send(err);
});
});
表单架构
const mongoose = require('mongoose');
const formSchema = new mongoose.Schema({
clientID: Number,
formData: {
formName: String,
components: String
}
})
module.exports = mongoose.model('Forms', formSchema);
答案 0 :(得分:0)
根据documentation,save()返回一个Promise,而不是Mongoose查询。
在referenced answer中使用exec()的原因是因为该示例执行查询,该查询返回了Query对象。在您的代码中,newForm是一个Document,而save()返回了Promise。 exec()在这种情况下不相关。
如果不希望使用then()语法,则可以始终将回调传递给save(),如文档中所述。