2017-09-12 3 views
0

私のフロントエンドはiOSモバイルアプリケーションで、バックエンドデータソースとしてeasyテーブルを使用しています。挿入/更新スクリプトコードはjsファイルに書き込まれます。Azure Easy Tableバックエンドでの例外処理

私のバックエンドコードに何か不具合があった場合、モバイルアプリはこれを知っています。誰も私にどのように例外処理を実装して、モバイルアプリに例外を送ることができるのか教えてくれますか?あなたはミドルウェアで例外をキャッチすると

 var table = module.exports = require('azure-mobile-apps').table(); 

var insertMiddleware = function(req,res,next) { 
const util = require('util'); 
var bPromiseRejected = false; 
var promises = [], promisesInsert = [], promisesUpdate = []; 


var requestItem = req.body; 
var tableRecord = req.azureMobile.tables('Table1'); 
var itemsToInsert = requestItem.ItemsToInsert; 
var itemsToUpdate = requestItem.itemsToUpdate; 


console.log('Step 1.'); 

//delete records array from feature dict 
delete requestItem["ItemsToInsert"]; 
delete requestItem["itemsToUpdate"]; 
//context.item = requestItem; 

if (itemsToInsert) { 
    promisesInsert = itemsToInsert.map(function(item) { 

     return tableRecord.insert(item).then (
       // Log the fulfillment value 
       function(val) { 
        console.log('Step 5: val: ' + val); 
        return(val); 
       } 
      ) 
      .catch (
       // Log the rejection reason 
       function(reason) { 
        console.log('Step 6. Handle rejected promise ('+reason+') here.'); 
        bPromiseRejected = true; 
        return("Error: " + reason); 
       } 
      ); 
     }); 
} 

if (itemsToUpdate) { 
    promisesUpdate = itemsToUpdate.map(function(item) { 
     return tableRecord.update(item).then (
       // Log the fulfillment value 
       function(val) { 
        console.log('Step 5: val: ' + val); 
        return(val); 
       } 
      ) 
      .catch (
       // Log the rejection reason 
       function(reason) { 
        console.log('Step 6. Handle rejected promise ('+reason+') here.'); 
        bPromiseRejected = true; 
        return("Error: " + reason); 
       } 
      ); 
     }); 
} 

promises = promisesInsert.concat(promisesUpdate); 
console.log('Promises: ' + util.inspect(promises, false, null)); 

    var result = Promise.all(promises) 
    .then(function(arrVals) { 
     //found an error in a promise 
     console.log('Promise completed. Vals: ' + JSON.stringify(arrVals)); 
     var arrRet = []; 
     for(var ind in arrVals) { 
      var val = arrVals[ind]; 
      //if val is a string error, don't do anything 
      console.log('Typeof Val: ' + typeof(val)) 
      if (typeof(val) === 'string') { 
       console.log("Already Inserted. Skipping.Val: " + val); 
       continue; 
      } else { 
       console.log("Item Inserted. Adding to Array. Val: " + val); 
       arrRet.push(val) 
      } 
     } 
     var result = {id:"Success", items: arrRet}; 
     console.log('All Records Inserted: ' + JSON.stringify(result)); 
     return res.end(JSON.stringify(result)); 

    } 
) 
.catch(
    function(reason) { 
     var retVal = { id: 'ERROR', reason: reason }; 
     console.error("Error: Promise Final.In catch. Reason: " + reason); 
     res.end(JSON.stringify(retVal)); 
     console.log('After 400 submitted'); 
    } 
); 
return result; 
} 

table.insert.use(insertMiddleware, table.operation); 
table.insert(function (context) { 
    return context.execute(); 
}); 
+0

、私はこのテーブルレベルで削除機能がありませんでしたし、それはプロジェクトレベル削除機能を実行していました。追加した後 table.delete(function(context){ return context.execute(); }); とres.status(500).send({エラー: '何かが爆発しました'}); if(itemsToDelete)のキャッチブロック{完全にうまく動作します。 – Girish

答えて

1

、あなたはクライアントにエラーを送信する代わりにreturn("Error: " + reason);

res.status(500).send({ error: 'something blew up' }); 

コード

の行を使用しようとすることができます。上記のコードで

enter image description here

+0

お返事ありがとうございます。しかし、私が各catchステートメントをres.status(500).send({error: 'something bloww'})に置き換えたとしても機能しません。それでも私には標準エラーメッセージ "エラー"があります:存在しないレコードを削除しようとしているときに "アイテムが存在しません" – Girish

+0

私は簡単なテーブルと関連する基本的な命名法にも非常に新しいです。 – Girish

+0

また、http://mysite.azurewebsites.net/app.js/debug/ を使用してNode.jsバックエンドの簡単なテーブルアプリケーションをデバッグしようとしていますが、ときどきデバッガにヒットしないことがあります。私のスクリプトコードが実行中であるかどうかわからない – Girish