簡體   English   中英

NodeJS內存泄漏

[英]NodeJS Memory Leak

此路由導致服務器的內存緩慢耗盡,我不知道為什么。 由於目標URL的SSL版本過舊,因此需要執行exec()表達式並進行可笑的解析,並且我無法讓任何節點SSL庫信任或忽略。 歡迎提供有關改進此代碼的其他建議。

(function() {
  var exec, express, fs, https, jsdom, qs, router, util;

  express = require("express");
  jsdom = require('jsdom');
  exec = require('exec');
  https = require('https');
  qs = require('querystring');
  fs = require('fs');
  util = require('util');

  router = express.Router();

  router.get("/getVars", function(req, res) {
    res.set({
      "Cache-Control": 'max-age=86400'
    });
    return exec("curl -m 6 -1 'https://some.url.com'", function(err, b, stderr) {
      if (b) {
        return jsdom.env(b, ["http://code.jquery.com/jquery.js"], function(err, window) {
          var eventvalidation, viewstate;
          viewstate = window.$("#__VIEWSTATE").val();
          eventvalidation = window.$("#__EVENTVALIDATION").val();
          return res.json({
            viewstate: viewstate,
            eventvalidation: eventvalidation
          });
        });
      } else {
        return res.json({
          viewstate: "verylongstring",
          eventvalidation: "verylongstring"
        });
      }
    });
  });

...

我建議消除jsdom,因為它是滿足您有限需求的非常繁重的組件,最好使用幾個正則表達式來實現,請參見下文。

  ...
  return res.json(getDataFromString(b || ''));
  ...

function getDataFromString(input){
  return {
    viewstate: (/id=\"__VIEWSTATE\" value=\"([^\"]*)\"/).exec(input)[1] || "verylongstring",
    eventvalidation: (/id=\"__EVENTVALIDATION\" value=\"([^\"]*)\"/).exec(input)[1] || "verylongstring"
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM