猫鼬.exec()无效,但诺言有效

时间:2019-12-05 22:02:14

标签: node.js mongodb express mongoose

我正在尝试将新条目添加到集合中,由于某种原因,我现在遇到此错误! 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);

1 个答案:

答案 0 :(得分:0)

根据documentation,save()返回一个Promise,而不是Mongoose查询。

referenced answer中使用exec()的原因是因为该示例执行查询,该查询返回了Query对象。在您的代码中,newForm是一个Document,而save()返回了Promise。 exec()在这种情况下不相关。

如果不希望使用then()语法,则可以始终将回调传递给save(),如文档中所述。