【发布时间】:2016-04-27 18:12:30
【问题描述】:
我在 nodejs 请求结束后面临写入问题: 我有一个 server.js 文件,它将请求发送到其他 js 文件(比如 abc.js),该文件将响应发送回 server.js 文件,然后 server.js 文件写入响应,然后结束响应。
我的问题是,如果我在 abc.js 中编写响应并在那里结束它只能正常工作,但如果它在 sererconf.js 中则不会。
让我明确一点,我只有在一次发送 20-30 个请求时才会遇到这个错误。我想知道它背后的逻辑,我搜索了很多,但没有找到好的答案,任何帮助将不胜感激。
server.js full code:
/* create HTTP server */
var httpd = http.createServer(function(req, res) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.writeHead(200, {"Content-Type" : "application/json"});
}).listen(3800);
/* send request to the file mentioned in url*/
httpd.on('request', function(req, res) {
urll = __dirname + '/..' + req.url;
fs.exists(urll, function (exists) {
if(exists){
var server = require(urll);
server.get(req,res);
}
});
module.exports = {
result : function(result){
if(Array.isArray(result)){
for(var key in result){
result[key] = JSON.parse(result[key]);
}
}
result = JSON.stringify(result);
res.write(result ,function(err) { if(!err) res.end(); });
},
};
});
**apps.js code**:
var constants = require('./lib/constant.js');
var APP_PATH = constants.APP_PATH;
module.exports = {
get : function(req) {
req.on('data', function(chunk) {
var hash = chunk;
hash = JSON.parse(hash);
var id = hash.id;
dirPath = APP_PATH + id;
fs.exists( dirPath, function (exists) {
if(exists)
read_app_dir(dirPath);
else
taskDone([]);
});
});
}
};
function read_app_dir(app_dir){
fs.readdir(app_dir,function(err, list){
if (err) {
httpd.log.info('cannot read apps dir at s_apps = '+err);
}else{
create_new_obj(list,app_dir);
}
});
}
function create_new_obj(list, app_dir){
appFilesObj = [];
var i = 0;
list.forEach(function(file) {
i=i+1;
file = app_dir +'/' +file;
appFilesObj.push(file);
if(i == Object.keys(list).length)
read_app_files(appFilesObj);
});
}
function read_app_files(appFilesObj,app_dir){
var apps = [];
var i = 0;
if(Object.keys(appFilesObj).length > 0){
appFilesObj.forEach(function(appfile) {
read_file(appfile,function(data){ i=i+1;
apps.push(data);
if(i == Object.keys(appFilesObj).length)
taskDone(apps);
});
});
}else{
taskDone([]);
}
}
function read_file(file,callback){
fs.readFile(file,'utf8', function (err, data) {
if (err)
httpd.log.info('cannot read file at s_apps = '+err);
else
callback(data);
});
}
function taskDone(apps){
var httpd = require(__dirname + '/server.js');
httpd.result(apps);
}
如果我在 taskDone() 中的这个文件中执行 res.write 和 res.end,那么它工作正常。
提前致谢:)
【问题讨论】:
-
贴出完整代码,因为这半个代码,语法错误无济于事。
-
嗨 Marcos,感谢您的快速响应,但关于代码,我确信没有语法错误,代码工作正常..上面的代码只是解释了我如何处理请求和结束响应。尽管这在 5-6 个请求之前都可以正常工作,但随着请求的增加,我的服务会中断。如果我在需要 url 后由 server.js 调用的文件中使用这个“res.wrrite 和 res.end”,那么一切都很完美。
-
您调用的其他文件的代码在哪里,问题发生在哪里...
-
真的很抱歉,现在我也添加了第二个文件的代码
-
还找不到问题,我运行了一千个请求,但我没有发生这种情况:(
标签: javascript node.js