2017-02-28 11 views
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); 
}); 
+0

하나의 아이디어 : 오류 처리 기능이 없습니다. 'https.get()'에 에러가 발생하면 응답을 보내지 않고 원래의 요청은 시간 초과됩니다. – jfriend00

+0

@ jfriend00 해결책으로 제안을 확인하겠다. 아래에 자유롭게 게시하고 답으로 추가하겠습니다. – RH8765

답변

0

하나의 아이디어 : 당신은 오류 처리가 누락되었습니다.

https.get()에서 오류가 발생하면 응답을 보내지 않고 원래 요청이 시간 초과됩니다.