我们在nodejs(服务器A)上构建了一个app,它使用REST API从另一个nodejs app(服务器B)获取数据。
同样,对于下载文件,服务器A上的服务器生成请求和服务器B从AWS S3获取文件并将数据传输回服务器A.
此系统运行良好,我们可以下载高达1GB的文件。
问题有时是服务器A崩溃,错误如下:
buffer.js:488
throw new Error('toString failed');
^
Error: toString failed
at Buffer.toString (buffer.js:488:11)
at Request.<anonymous> (/var/www/sky/portal/node_modules/request/request.js:1145:39)
at emitOne (events.js:95:20)
at Request.emit (events.js:182:7)
at IncomingMessage.<anonymous> (/var/www/sky/portal/node_modules/request/request.js:1091:12)
at IncomingMessage.g (events.js:273:16)
at emitNone (events.js:85:20)
at IncomingMessage.emit (events.js:179:7)
at endReadableNT (_stream_readable.js:913:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
服务器A使用以下代码调用服务器B:
exports.downloadAsset = function(req, res, assetUrl, cb) {
res.cookie('fileDownload', 'true');
request(
config.api.baseUrl + assetUrl
,
function(error, response, body) {
}
).pipe(res);
}
我们不确定应用程序崩溃的位置。 请建议。
答案 0 :(得分:0)
我以前对上述问题进行排序的解决方案: 我不得不修改我们的流程。我们将数据从服务器B流式传输到服务器A,但现在服务器B正在向服务器A发送签名URL,并使用该签名URL直接从S3下载文件。