<address id="ttjl9"></address>

      <noframes id="ttjl9"><address id="ttjl9"><nobr id="ttjl9"></nobr></address>
      <form id="ttjl9"></form>
        <em id="ttjl9"><span id="ttjl9"></span></em>
        <address id="ttjl9"></address>

          <noframes id="ttjl9"><form id="ttjl9"></form>

          mongoose中save無法獲取回調函數值的解決方法

          2018-7-18    seo達人

          如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

          mongoose保存數據:

          const save = new Model(data).save()
              
          • 1

          如果成功,則可以獲取到保存在數據庫的值,但是如果保存數據失敗,則會拋出異常,好在save可以傳入一個回調函數,用法如下:

          const save = new Model(data).save((err, result)=>{ if(err){ // 保存失敗執行的操作
              }else { // 保存成功執行的操作
              }
          
          })
              
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8

          我們希望根據結果獲取到不同的值,但是此時save返回的是undefined,因為save中的回調函數是一個異步操作

          解決方法:

          使用try catch:

          try{
              const save = await new Model(data).save();
              // 保存成功執行的操作 return ... }catch(err){
              // 保存失敗執行的操作 return ... }
              
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8

          注意:在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);
              
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25

          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();
              
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13

          controller.js

          const server = require("./server); async login(){ // 首先獲取請求中攜帶的用戶信息 const result = await server.login(user);
              if(result.success){ // 注冊成功執行的操作 }else { // 注冊失敗執行的操作 }
          }
          藍藍設計www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務

          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://www.syprn.cn

          存檔

          亚洲va欧美va天堂v国产综合