.hen не определено, когда я пытаюсь сохранить в MongoDB - PullRequest
0 голосов
/ 19 декабря 2018

Я новичок в 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); 

Я действительно не понимаю, почему это говоритmsgstr "потом неопределено".(тело хорошее)

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

проверьте, является ли модель многообещающим типом или нет, если это не многообещающее, тогда используйте callback

обещания мангусты

assert.ok (пользовательэкземпляр Promise);// это возвращаемое значение или ложь

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);


      var user = userRegister.save()

     assert.ok(user instanceof Promise); 

     // if assert.ok return true then use user.then 
    // else use callback  userRegister.save( function(doc){ })    

      user.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"
        })
      });
    });
0 голосов
/ 19 декабря 2018

Кажется, что функция "save" не возвращает Promise.Но в исходном коде это делает ... https://github.com/Automattic/mongoose/blob/master/lib/model.js#L385

Также вы можете попробовать метод "создать".
https://github.com/Automattic/mongoose/blob/master/lib/model.js#L2646

Может быть, это будет hellpfull:

   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);
      });
0 голосов
/ 19 декабря 2018
router.post("/signup", async (req, res) => {
    try{
        const userRegister = await UserRegister.create({
            _id: new mongoose.Types.ObjectId(),
            nickname: req.body.nickname,
            email: req.body.password,
            password: req.body.password,
            level: 0
        });
    }
    catch(err){
        console.log("error => " + err)
        res.status(409).json({
        message: "ERROR"
        })
    }

    console.log(userRegister);
    res.status(200).json({
        message: "User created"
    });
});
...