NodeJS内存泄漏

NodeJS Memory Leak

本文关键字:泄漏 内存 NodeJS      更新时间:2023-09-26

这个路由导致我的服务器慢慢耗尽内存,我不知道为什么。荒谬的exec()表达式和解析是必要的,因为目标URL的SSL版本很古老,我无法获得任何可以信任或忽略的节点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"
  }
}