我使用express來創建一個webservice,它將從流中讀取字符串數據,並使用該值響應HTTP POST請求。這裏是定義readFileFromS3(.)
函數爲S3Store.js
文件的代碼:流讀取返回nodejs中的空
S3Store.js現在
S3Store.prototype.readFileFromS3 = function(filename, callback) {
var readConfig = {
'Bucket': 'shubham-test',
'Key': filename
};
var readStream = this.s3.getObject(readConfig).createReadStream();
var allData = '';
readStream.on('data', function(data) {
//data = Buffer.concat([allData, data]);
data = allData + data;
console.log("data: " + data);
});
readStream.on('error', function(err) {
callback(err, null);
});
,如果我請從終端此方法是這樣的:
s3Instance.readFileFromS3('123.json', function(err, data) {
console.log(data);
});
我看到登錄到控制檯的適當的字符串data
。但是,如果我從routes
中的某個快速請求HTTP POST
請求中調用相同的方法,則該服務響應的值爲data
設置爲空字符串。對於POST請求代碼:
router.post('/resolve', function(req, res) {
var commandJson = req.body;
var appId = commandJson['appId'];
var command = commandJson['text'];
if (appId == undefined || command == undefined) {
res.status(400).send("Malformed Request: appId: " + appId + ", command: " + command);
};
s3Store.readFileFromS3('123.json', function(err, data) {
res.send(data);
});
});
調用從HTTP POST方法readFileFromS3(.)
而不是當我跑到離節點控制檯直接同樣的方法爲什麼它返回一個空字符串?
我用你的readFileFromS3()方法的版本,它工作得很好。然而,對於Nodejs來說,我是新手 - 你能否詳細說明「但是你沒有把任何事情傳遞給完成回調」? –
@ Shubham.Shukla我加了一些解釋。 – robertklep