Node.js 应用程序性能

Node.js Application Performance

我目前在 Azure 上有一个 node.js 脚本,它获取一个文件(通过下载 URL link 到该文件)并对它进行 base64 编码,然后发送这个 base64编码文件返回请求源。我 运行 遇到的问题是基于性能的。在某些情况下,下面的脚本通过 运行 超过 30 秒的时间使单独的应用程序超时。这些超时之一的相关文件大小不到 MB。有什么想法吗?

脚本:

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() 上收到错误,您将永远不会发送响应,原始请求将超时。