我有一个用 Node.js 和 Express 编写的非常简单明了的 API,它工作得很好,但时不时地,jQuery.post
调用将保持“待处理”(并最终超时)。在服务器端,我已经监控了请求和结果,它200
在大约 40 毫秒内记录了带有适当数据的响应代码。无论我刷新页面多少次(调用中的数据是静态的,不是基于输入的),请求在服务器上成功完成,但在客户端挂起。如果我重新启动 node.js 服务器脚本,一切都很好并且客户端上的正常功能恢复。
在过去的 3 天里它运行顺利,没有重新启动,然后在我重新启动脚本大约一小时后,我不得不再次执行它。过去 2 小时现在一切正常。
- Node.js v0.10.10
- 快递 v3.2.6
任何见解都会有所帮助。谢谢。
编辑- 添加代码 这是挂起的功能。
exports.getDistinct = function(req, res) {
var params = {
filter: function() {
var filter = getParams(req, 'filter');
if ( filter ) {
f = {};
for (var key in filter)
f[key] = { $in: filter[key] }
var search = getParams(req, 'search');
if ( search ) {
for (var key in search) {
f[key] = new RegExp(helper.escapeRegExp(search[key]),"gi");
}
}
return f;
} else {
// send error
send(req,res,{'error': 'no filter specified'}, 500);
}
}(),
field: function() {
var field = getParams(req, 'field');
if ( field ) return field;
else send(req,res,{'error': 'no field specified'}, 500);
}(),
};
//console.log(util.inspect(params,false, null));
db.results.distinct(
params.field,
params.filter,
function(err, results) {
if (err) send(req,res,err,500);
if (params.field == 'Title') {
var filtered = [];
db.testcases.find().sort( { _id: 1 } ,function(err, tcnames) {
if (err) send(req,res,err,500);
for (var i=0;i<results.length;++i) {
if (results[i].match(/^up/gi)) {
tcnames.filter( function(tc) {
if (tc._id == results[i]) filtered.push(tc);
});
}
}
filtered.sort(helper.compare);
send(req,res,filtered,200);
});
} else {
send(req,res,results,200);
}
}
);
}
这是send
正在使用的函数的代码: function send(req, res, data, status) { var isJsonp = req.query.hasOwnProperty('callback'); 如果(!状态)状态= 200;if (isJsonp) res.send(req.query['callback']+'('+JSON.stringify(data)+')', status); 否则 res.send(数据,状态);}
编辑刚刚注意到这一点httpd.conf
,我不知道它是否相关:
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully