2017-09-12 1 views
0

Mon frontal est iOS Mobile App et comme source de données principale, j'utilise la table easy. insérer/mettre à jour le code de script est écrit dans des fichiers js.Gestion des exceptions dans Azure Easy Table back end

Mais si quelque chose casse dans mon code backend, l'application mobile le sait maintenant. quelqu'un peut-il me guider comment mettre en œuvre la gestion des exceptions afin que je puisse envoyer l'exception à l'application mobile?

 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

Dans le code ci-dessus, je manque la fonction de suppression à ce niveau de la table et il exécutait la fonction de suppression au niveau du projet. après l'ajout de table.delete (fonction (contexte) { return context.execute(); }); et res.status (500) .send ({erreur: 'Quelque chose a explosé'}); dans le bloc catch de if (itemsToDelete) {cela fonctionne parfaitement bien. – Girish

Répondre

1

Lorsque vous attrapez une exception dans le middleware, vous pouvez essayer d'utiliser cette ligne de code

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

au lieu de return("Error: " + reason); d'envoyer l'erreur au client.

enter image description here

+0

Merci pour votre réponse. mais ça ne marche pas même si j'ai remplacé chaque instruction catch par res.status (500) .send ({error: 'quelque chose a explosé'}); encore il m'envoie un message d'erreur standard "erreur": "L'élément n'existe pas" lorsque j'essaie de supprimer un enregistrement qui n'existe pas. – Girish

+0

S'il vous plaît noter que je suis très nouveau à même la nomenclature de base de la table facile et connexes. – Girish

+0

J'essaie aussi de déboguer l'application de table facile backend Node.js en utilisant http://mysite.azurewebsites.net/app.js/debug/ mais parfois il frappe parfois il ne frappe pas le débogueur. Je ne suis pas sûr que mon code de script est en cours d'exécution ou non – Girish