我有一个可以保存在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 })
}
}
答案 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
无法返回承诺,它始终是同步的。