mongoose保存数据:
const save = new Model(data).save()
如果成功,则可以获取到保存在数据库的值,但是如果保存数据失败,则会抛出异常,好在save可以传入一个回调函数,用法如下:
const save = new Model(data).save((err, result)=>{
if(err){
// 保存失败执行的操作
}else {
// 保存成功执行的操作
}
})
我们希望根据结果获取到不同的值,但是此时save返回的是undefined,因为save中的回调函数是一个异步操作
解决方法:
使用try catch:
try{
const save = await new Model(data).save();
// 保存成功执行的操作
return ...
}catch(err){
// 保存失败执行的操作
return ...
}
注意:在async函数中才可以这么使用,因为await只能用在async函数中
示例:(注册功能)
user.model.js
const mongoose = require("mongoose");
const port = process.env.PORT || "8899";
const UserSchema = mongoose.Schema({
userName: {
type: String,
unique: true
},
passWord: String,
createTime: {
type: Date,
default: Date.now()
},
updateTime: {
type: Date,
default: Date.now()
}
}, {
timestamps: {
createAt: "createTime",
updateTime: "updateTime"
}
});
module.exports = mongoose.model("USER", UserSchema);
service.js
const User = require("./user.model);
class User{
async login(user){
try{
const result = await new User(user).save();
// 其他操作,如发送注册邮件
return { success: true }
}catch(err){
return { success: false, message: "用户名或密码错误" }
}
}
}
moduel.exports = new User();
controller.js
const server = require("./server);
async login(){
// 首先获取请求中携带的用户信息
const result = await server.login(user);
if(result.success){
// 注册成功执行的操作
}else {
// 注册失败执行的操作
}
}