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();
});
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