0
我目前有一個坐在Azure上的node.js腳本,它通過下載URL鏈接獲取文件並通過base64對其進行編碼,然後將此base64編碼文件發送回請求源。我遇到的問題是基於性能的。下面的腳本在某些情況下通過運行時間超過30秒來超時一個單獨的應用程序。其中一個超時問題的文件大小小於MB。有任何想法嗎?Node.js應用程序性能
腳本:
const express = require('express');
const bodyParser = require('body-parser');
const https = require('https');
const fs = require('fs');
const request = require('request');
const util = require('util');
const port = process.env.PORT || 3000;
var app = express();
app.use(bodyParser.json());
app.post('/base64file', (req, res) => {
var fileURL = req.body.fileURL;
var listenerToken = req.body.listenerToken;
var testingData = {
fileURL: fileURL,
listenerToken: listenerToken
};
/*
Make sure correct token is used to access endpoint..
*/
if(listenerToken !== <removedforprivacy>) {
res.status(401);
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ error: 'You are not authorized'}));
} else if (!fileURL){
res.status(400);
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({ error: 'The request could not be understood by the server due to malformed syntax.'}));
} else {
https.get(fileURL, function(response) {
var data = [];
response.on('data', function(chunk) {
data.push(chunk);
}).on('end', function() {
//build the base64 endoded file
var buffer = Buffer.concat(data).toString('base64');
//data to return
var returnData = {
base64File: buffer
};
if(buffer.length > 0) {
res.setHeader('Content-Type', 'application/json');
res.status(200);
res.send(JSON.stringify(returnData));
} else {
res.setHeader('Content-Type', 'application/json');
res.status(404);
res.send(JSON.stringify({ error: 'File URL not found.'}));
}
});
});
}
});
app.listen(port, () => {
console.log('Server is up and running ' + port);
});
一個想法:你錯過了錯誤處理。如果你在'https.get()'上得到一個錯誤,你將永遠不會發送一個響應,並且原始請求會超時。 – jfriend00
@ jfriend00我會檢查你的建議作爲解決方案 - 這就是它。隨意張貼下面,我會添加它作爲答案 – RH8765