【问题标题】:mongoose Model.create function returns undefinedmongoose Model.create 函数返回未定义
【发布时间】:2020-01-18 04:07:30
【问题描述】:

当我尝试创建用户时,上述查询返回 200,但每当我登录 MongoDB 时,都没有创建任何集合。有人可以帮忙吗?

//用户模型


const userSchema = mongoose.Schema({
    name: {
        type : String, 
        required  : true,
        trim : true
    },
    email: {
        type: String,
        required: true,
        unique: true,
        lowercase: true,
        validate: value => {
            if(!validator.isEmail(value)){
                throw new Error({error : 'Invalid email address'})
            }
        }
    },
    password: {
        type: String, 
        required: true,
        minLength: 5
    },
    // a user can have multiple jobs
    jobs : [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Job'
    }],
    tokens: [{
        token: {
            type: String,
            required:  true
        }
    }]
})
const User = mongoose.model('User', userSchema)
module.exports = User

//编写的用户函数

  createUser(name, email, password){
        return User.create({name: name, email: email, password : password}, (err, docs) => {
            if(err){
                throw err.message;
            }

        });
    }

//routes.js

// user create
router.post('/users', async(req, res) => {
    try{
        const {name, email, password } = req.body
        const user = userManager.createUser(name, email, password); [1]
        res.status(200).json(user)
    }
    catch(error) {
        res.status(400).send({error : error.message})
    }
})

line[1] 返回未定义。为什么 ? 注意:满足所有模块要求

【问题讨论】:

    标签: node.js rest mongoose mongoose-schema


    【解决方案1】:

    问题是你同步调用了一个异步函数。它返回 undefined 因为该函数尚未解析。 一个解决方案可能是使用promisesasync/await

    例子:

    async createUser(name, email, password) {
        const createdUser = await User.create({name,email,password});
        return creaatedUser;
    }
    

    【讨论】:

      【解决方案2】:

      创建schema 后,您需要创建一个模型FROM 该架构。

      来自MDN的示例:

      // Define schema
      var Schema = mongoose.Schema;
      
      var SomeModelSchema = new Schema({
        a_string: String,
        a_date: Date
      });
      
      // Compile model from schema
      var SomeModel = mongoose.model('SomeModel', SomeModelSchema );
      

      现在创建模型后,您可以使用SomeModel.create

      编辑line[1] 将始终返回 undefined 因为您正在使用 callbacks 并且从回调中获取价值的唯一方法是推送另一个回调(我真的不鼓励这样做)。但最好的方法是使用Promises 现在猫鼬默认支持`Promises.所以,基本上是为了承诺,

      // user functions written
      
      async function createUser(name, email, password){
        try {
          return await User.create({ name: name, email: email, password: password });
        } catch (err) {
          throw err.message;
        }
      }
      

      在路由器中添加await:

      const user = await userManager.createUser(name, email, password);
      

      【讨论】:

      • 我在问题中看不到这一点。您创建了架构,但没有创建模型。
      • 那为什么返回 undefined ?
      • 编辑了答案。请仔细阅读 node.js 中的异步函数。\
      猜你喜欢
      • 2012-11-29
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 2020-07-11
      • 2017-12-14
      • 2016-10-18
      • 2011-12-08
      相关资源
      最近更新 更多