J'essaie de déployer un exemple fireabase, mais lorsque j'essaie de le déployer, CLI lance une erreur:
[CODE]
const functions = require('firebase-functions'); //to activate firebase functions
const admin = require('firebase-admin'); //to active firebase database permissions
admin.initializeApp(functions.config().firebase);
exports.addMessage = functions.https.onRequest((req, res) => {
// [END addMessageTrigger]
// Grab the text parameter.
const original = req.query.text;
// [START adminSdkPush]
// Push the new message into the Realtime Database using the Firebase Admin SDK.
admin.database().ref('/messages').Push({original: original}).then(snapshot => {
// Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console.
res.redirect(303, snapshot.ref);
});
// [END adminSdkPush]
});
[ERREUR]
15:3 error Expected catch() or return promise/catch-or-return
15:69 error Each then() should return a value or throw promise/always-return
✖ 2 problems (2 errors, 0 warnings)
npm ERR! Darwin 17.4.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "--prefix" "/Users/user/test/functions" "run" "lint"
npm ERR! node v6.10.2
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! functions@ lint: `eslint .`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the functions@ lint script 'eslint .'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the functions package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! eslint .
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs functions
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls functions
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /Users/eliassebastian/Developer/npm-debug.log
Error: functions predeploy error: Command terminated with non-zero exit code1
Je jette un oeil à la version originale fournie par firebase ici
Je suis novice en Javascript et dans tout ce monde, alors je suis vraiment perdue avec ce type de messages.
Comment puis-je résoudre ça?
Les avertissements ESLint sont légitimes. Pour obtenir plus de détails sur chacun, vous pouvez les rechercher en utilisant leur identifiant unique. Par exemple:
15:3 error Expected catch() or return promise/catch-or-return
L'identifiant de l'avertissement ici est promise/catch-or-return
. Googler pour "eslint promise/catch-or-return" trouve un plugin pour ESLint qui décrit l'avertissement comme suit:
Applique l'utilisation de catch () sur les promesses non retournées
Vous recevez ceci parce que vous avez une promesse d'être retournée de then
, mais que vous n'avez jamais return
ou catch
pour des erreurs possibles.
Le deuxième avertissement:
15:69 error Each then() should return a value or throw promise/always-return
provient du même plugin ESLint, et est décrit comme suit:
Revenez à l'intérieur de then puis () pour créer des chaînes de promesse lisibles et réutilisables.
Cela vous oblige à renvoyer une valeur dans chaque fonction appelée par then
, même si vous n'avez rien de spécial à envoyer à la chaîne de promesse suivante.
Vous pouvez résoudre ces deux problèmes comme ceci:
admin.database().ref('/messages').Push({original: original}).then(snapshot => {
res.redirect(303, snapshot.ref);
return null;
}).catch(error => {
console.error(error);
res.error(500);
});
Notez que le bloc then
renvoie null maintenant et que catch
est utilisé sur la promesse renvoyée par then
pour capturer les erreurs et envoyer une réponse d'erreur au client.
Doug Stevenson répond partiellement, car il comporte un défaut.
CA devrait etre :
admin.database().ref('/messages').Push({original: original}).then(snapshot => {
res.redirect(303, snapshot.ref);
return 1; // IT SHOULD RETURN NON-NULL VALUE
}).catch(error => {
console.error(error);
res.error(500);
});
La fonction cloud est entrée dans la boucle infinite lorsqu'elle a renvoyé null. Et par conséquent, nous pouvons voir la fonction expirée après 60 000 ms dans l'image ci-dessus.
Après de telles fonctions, vous obtiendrez l’erreur les fonctions peuvent être exécutées (voir la photo ci-dessus). En effet, dans Spark Plan (plan de niveau gratuit), il existe une limite sur CPUMilliSecondsDailyNonbillable.
Si vous cliquez sur Stratégie de quota de Stackdriver dans la section Fonctions cloud, vous pouvez voir la limite dans GCD (Google Cloud Platform).