此路由導致我的服務器緩慢地耗盡內存,我無法弄清楚原因。可笑的exec()表達式和解析是必要的,因爲目標URL的古老SSL版本,我不能讓任何節點SSL庫信任或忽略。歡迎任何關於改進此代碼的其他建議。NodeJS內存泄漏
(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"
});
}
});
});
...
不知道這是否會有所幫助,但您是否嘗試過[node-memwatch](https://github.com/lloyd/node-memwatch)? – incutonez 2014-09-22 23:09:41
看起來你正在嘗試使用TLSv1,[HTTPS請求](http://nodejs.org/api/https.html#https_https_request_options_callback)允許你使用'secureProtocol'標誌指定......但它確實看起來你要麼必須創建一個自定義代理或使用任何代理才能使用它。 – incutonez 2014-09-22 23:21:07
我不是一個避免使用DOM,但你應該使用正則表達式來獲取視圖狀態數據,事件驗證,而不是jsdom(這是很大的,至少可以這樣說)......如果它們是.net他們應該是base64字符串和可預測的。 – Tracker1 2014-09-23 00:13:42