搜索

首页  >  问答  >  正文

javascript - 如何在sequelize框架上多筆update?

我用express做了restful api接口,前端用angular1.5 $http呼叫接口,之前我都只更新一筆資料,沒有太大問題,代碼如下:

express api部分

router.put('/animals', (req, res, next) => {

  let animal = req.body;
  db.Animal.findOne({
    where: {
      idNo: animal.idNo
    }
  }).then(function (data) {

    data.updateAttributes(animal).then(function (animal) {
      res.json(animal);
    });

  });


});

Angular部分


$http({ 
            method :  'PUT' , 
            url :  '/api/animals' , 
            data :  animal, 
            headers :  { 'Content-Type' :  'application/json' } 
})
.success(function(animal){
    
          alert('更新成功');
      });

但是我現在想更新多筆資料,一個array內的多個animal,目前有兩個思路:

  1. api接口不更改,在angular那寫個for迴圈,多次呼叫同個接口,但這樣似乎要寫個閉包才能確定是不是全部的update 完成了

  2. 更改api部分,angular一次把整個array傳進去,再利用sequelize的某些功能做一次更新,這部分目前只看到兩種做法,

    1.利用promise.all 進行全部更新
    2.一樣的寫法 只是把for迴圈放到api那
    3.或許更高級一點可以利用transaction的功能,如果有一筆更新失敗就rollback??這我從來沒用過不清楚
    
    

請問哪樣做法比較好,具體又要怎麼實現呢? 謝謝

目前是使用Angular1.5提供的$q,可以一次發一個array的$http要求(promise),再用$q.all取得結果,具體代碼如下:

var qPromiseArr = [];
        for(var i=0;i<switchingCageAnimals.length;i++){
            qPromiseArr.push( $http({ 
                        method :  'PUT' , 
                        url :  '/api/animals' , 
                        data :  switchingCageAnimals[i], 
                        headers :  { 'Content-Type' :  'application/json' } 
            }));
        }
        $q.all(qPromiseArr).then(function(dataList){
           //dataList是一個Object Array 可以取得每次http返回的結果

   
    });
高洛峰高洛峰2773 天前722

全部回复(0)我来回复

暂无回复
  • 取消回复