簡體   English   中英

在 router.js 上使用 promise 模擬錯誤處理

[英]Simulate error handling with promises on router.js

我正在嘗試將傳感器值保存到我的 mongodb 數據庫中。 我正在使用 promise 進行正確的錯誤處理。 我正在使用then()catch()但我想我做得不對。 我發送一個組 ID,以便它檢查組 ID 是否存在,然后僅存儲傳感器信息。 這是我的代碼。

router.post('/data/:group_id', function(req,res,next){
    var group_id = req.params.group_id;
    User.find({group_id : group_id}).then(function(user){
        var object_id = user[0]._id;
        var datas = req.body;
        var data = new Data({
           user : object_id,
            value: datas.value,
            valueString : datas.valueString,
            sensorStatus : datas.sensorStatus,
            timeStamp : new Date().toJSON()
        });
        data.save().then(function(data){
            res.send('Data Saved');
        });
    }).catch(function(e){
        if(e.code === undefined){
            res.send('Group id does not exist');
        }else{
            res.send(e);
        }
    });
});

如果我發送一個不存在的組 ID,它確實說組 ID 不存在,但是如果我發送了錯誤的 json 數據來保存我的傳感器信息,則沒有錯誤,但是我用來發送信息的郵遞員應用程序得到卡住。 這是我故意使用有效組 ID 生成的錯誤。

我對此很陌生,因此需要了解 Promise 如何在無法找到 group_id 時首先處理錯誤,然后在傳感器 json 信息錯誤的情況下處理錯誤。

發送到http://localhost:3000/api/data/3

{
    "value1" : "79" ,
    "valueString" : "Small data",
     "sensorStatus" : "false"
}

額外信息用戶和數據模型。 注意(請添加 require 和 export 部分)

var schema = new Schema({
    group_id : {type : Number, required: true},
    password : {type : String, default: null},
    project : {type : String , default : null}
});
var schema = new Schema({
    user: {type: Schema.Types.ObjectId, ref: 'User'},
    value :{type : Number , required : true} ,
    valueString : {type : String, required : true},
    sensorStatus : {type : Boolean , default : 0},
    timeStamp  : {type :String , required : true}
});

是的,您陷入了一個常見的陷阱:不要嵌套.then()子句,而是返回 Promise 和鏈:

不要做

foo().then(() => {
  bar().then(() => {
    baz();
  }
}

.then()和鏈內部返回 Promise,如下所示:

foo()
  .then(() => { return bar(); })
  .then(() => { return baz(); });

或者更短的版本

foo()
  .then(() => bar())
  .then(() => baz());

在你的情況下:

router.post('/data/:group_id', function(req,res,next){
  var group_id = req.params.group_id;
  User.find({group_id : group_id})
    .then(function(user){
      // bla bla bla
      return data.save();
    })
    .then(function(data){
      return res.send('Data Saved');
    });
    .catch(function(e){
      if(e.code === undefined){
          res.send('Group id does not exist');
      }else{
          res.send(e);
      }
    });
});

作為一個通用規則:始終從.then()處理程序返回拋出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM