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 {
// 註冊失敗執行的操作
}
}