猫鼬Model.create函数返回未定义

时间:2019-09-17 09:55:50

标签: node.js rest mongoose mongoose-schema

当我尝试创建用户时,上面的查询返回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})
    }
})

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

1 个答案:

答案 0 :(得分:0)

创建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]将始终返回未定义的状态,因为您正在使用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);