如何显示猫鼬的错误?

时间:2020-07-21 16:16:24

标签: node.js mongodb express mongoose mongoose-schema

我有一个可以保存在MongoDB中的用户,当我输入正确的数据时,保存有效。

但是,当我输入错误的数据时,我无法捕获将要为用户看到的错误。我只能在代码编辑器上看到以下内容:

... UnhandledPromiseRejectionWarning:ValidationError:用户验证 失败:用户名:用户名不存在!...

此错误“杀死了”服务器,因此我没有呈现来宾模板。

问题是我如何捕捉错误并将错误显示给用户?

模式:

const mongoose = require("mongoose")

const userSchema = new mongoose.Schema({
  username: {
    type: String,
    required: [true, "username is not there!"],
    minlength: 3,
    maxlength: 20,
  },
  email: {
    type: String,
    required: true,
  },
  password: {
    type: String,
    required: true,
    minlength: 6,
    maxlength: 20,
  },
})

module.exports = mongoose.model("User", userSchema)

控制器:

const mongoose = require("mongoose")
const userModel = require("../models/userModel")

exports.signUp = async (req, res) => {
  const { username, email, password } = req.body
  try {
    const user = await new userModel({
      username,
      email,
      password,
    })
    user.save()
  } catch (error) {
    res.render("home-guest", { error })
  }
}

1 个答案:

答案 0 :(得分:0)

您只需要向保存操作添加await,因为它也是异步的:

const mongoose = require("mongoose")
const userModel = require("../models/userModel")

exports.signUp = async (req, res) => {
  const { username, email, password } = req.body
  try {
    const user = await new userModel({
      username,
      email,
      password,
    })
    // Wait for the save to complete, also allowing you to catch errors
    await user.save()
  } catch (error) {
    res.render("home-guest", { error })
  }
}

EDIT :请注意,您不需要在new userModel()前面使用异步。 new 无法返回承诺,它始终是同步的。