首页 > 解决方案 > 当我尝试保存在 MongoDB 中时,.then 未定义

问题描述

我是 node.js 的新手。我收到了这条消息:

TypeError: Cannot read property 'then' of undefined

这是代码:

router.post("/signup", (req, res) => {
  const userRegister = new UserRegister({
    _id: new mongoose.Types.ObjectId(),
    nickname: req.body.nickname,
    email: req.body.password,
    password: req.body.password,
    level: 0
  });
  console.log(req.body.nickname + " " + req.body.email + " " + req.body.password);
  userRegister
    .save()
    .then(doc => {
      console.log(doc);
      res.status(200).json({
        message: "User created"
      });
    })
    .catch(err => {
      if (err)
        console.log("error => " + err)
      res.status(409).json({
        message: "ERROR"
      })
    });
});

和架构:

const mongoose = require("mongoose");

const userRegister = mongoose.Schema({
  _id : mongoose.Schema.Types.ObjectId,
  nickname: String,
  email: String,
  password: String,
  level: Number
});

module.exports = mongoose.model("UserRegister", userRegister); 

我真的不明白为什么它说“.then undefined”。(身体很好)

标签: javascriptnode.jsexpressmongoosepromise

解决方案


似乎函数“保存”不返回 Promise。但在源代码中它确实...... https://github.com/Automattic/mongoose/blob/master/lib/model.js#L385

您也可以尝试“创建”方法。
https://github.com/Automattic/mongoose/blob/master/lib/model.js#L2646

也许它会很糟糕:

   const result = new SomeModel({...});

   new Promise((resolve, reject) => {
      // Save model
      result.save(err => {
        if (err) {
          return reject(new Error(`Error with exam ersult save... ${err}`));
        }
        // Return saved model
        return resolve(result);
      })
      .then(res => {
        return res;
      })
      .catch(err => {
        throw new Error(err);
      });

推荐阅读