我正在使用aws-sdk for javascript。下面aws-sdk崩溃nodejs程序
该代码在一个独立的程序
//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
});
再次使用时正常工作,上面的代码正常工作作为一个独立的文件。数据被推入流水,然后进一步下移至Redshift。 所以如果我执行
node program.js
我能看到我的红移数据。好极了!!
=============================
但是,我真正想实现的是将数据推到当我的快速应用程序中某条路线受到撞击时流水。所以,我采取完全相同的代码如上,贴在我的路线
// 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");
});
执行firehose.putRecord的那一刻..它崩溃我的程序,出现以下错误:
```
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)
我不明白为什么这段代码崩溃了我的快车程序。这是aws-sdk库中的bug还是我做错了什么?
终于明白了这个问题。 aws-sdk没有正确安装(我不知道这是怎么发生的)。在第115行的文件sequential_executor.js中有一个语句** doneCallback.call ** ...但是在我的文件中,该语句只是** doneCallback.cal ** .. –