J'utilise aws-sdk pour javascript.aws-sdk crashing nodejs programme
Le code ci-dessous fonctionne bien lors de l'utilisation dans un programme autonome
//program.js
const AWS = require('aws-sdk');
const firehose = new AWS.Firehose({
accessKeyId: "XXX",
secretAccessKey: "YY"
});
const params = {
DeliveryStreamName: 'demo1',
Record: {
Data: new Buffer("Hello World")
}
};
firehose.putRecord(params, function (err, data){
if (err) {
console.log(err);
return;
}
console.log(data); // successful response
});
Encore une fois, le code ci-dessus fonctionne très bien en tant que fichier autonome. Les données sont poussées dans les tuyaux d'incendie, puis plus loin vers Redshift. donc si j'execute
node program.js
Je suis capable de voir mes données Redshift. Yay!!
=============================
Cependant, ce que je veux vraiment atteindre est de pousser les données à firehose quand un certain itinéraire est frappé dans mon application express. Je prends donc exactement le même code que ci-dessus et le coller dans ma route
// router.js
const AWS = require('aws-sdk');
const firehose = new AWS.Firehose({
accessKeyId: "XXX",
secretAccessKey: "YY"
});
router
.get('/v1/locations/:id?', (req, res) => {
const params = {
DeliveryStreamName: 'demo1',
Record: {
Data: new Buffer("Hello World")
}
};
firehose.putRecord(params, function (err, data){
if (err) {
console.log(err);
return;
}
console.log(data);
});
// do the work that needs to be done for this route and send a response
res.send("some data");
});
La minute firehose.putRecord est exécuté .. il se bloque mon programme avec l'erreur suivante:
`` `
TypeError: doneCallback.cal is not a function
at Request.callListeners (/api-project/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
at callNextListener (/api-project/node_modules/aws-sdk/lib/sequential_executor.js:95:12)
at /api-project/node_modules/aws-sdk/lib/event_listeners.js:74:9
at finish (/api-project/node_modules/aws-sdk/lib/config.js:315:7)
at /api-project/node_modules/aws-sdk/lib/config.js:333:9
at Credentials.get (/api-project/node_modules/aws-sdk/lib/credentials.js:126:7)
at getAsyncCredentials (/api-project/node_modules/aws-sdk/lib/config.js:327:24)
at Config.getCredentials (/api-project/node_modules/aws-sdk/lib/config.js:347:9)
at Request.VALIDATE_CREDENTIALS (/api-project/node_modules/aws-sdk/lib/event_listeners.js:69:26)
at Request.callListeners (/api-project/node_modules/aws-sdk/lib/sequential_executor.js:101:18)
Je ne comprends pas pourquoi ce code bloque mon programme express. est-ce un bug dans la bibliothèque aws-sdk ou est-ce que je fais quelque chose de mal?
Enfin compris le problème. aws-sdk n'avait pas été installé correctement (je me demande comment cela pourrait arriver). dans le fichier sequential_executor.js sur la ligne 115 .. il y a une déclaration ** doneCallback.call ** ... cependant dans mon dossier cette déclaration était seulement ** doneCallback.cal ** .. –