これは私が使用しているパッケージのバージョンです:
node.js 0.10.3
express 3.4.4
jade 0.35.0
xml2js 0.2.8
奇妙な問題に直面しています。2 番目の ajax リクエスト (/tasks のリクエスト) が数分間保留状態のままです。
ここで私のJavaScript呼び出し:
$('#add-task').click(function(){
$.post('/addTask', function(){
loadTasks();
});
});
function loadTasks(){
$.get('/tasks', function(tasks){
$('#tasks > tbody').html(tasks);
});
}
そしてここに私のルートファイル:
exports.addTask = function(req, res){
fs.readFile(xmlPath, function(err, data) {
parser.parseString(data, function (err, result) {
var ws = fs.createWriteStream(xmlPath),
xw = new XMLWriter(true, function(string, encoding) {
ws.write(string, encoding);
});
xw.startDocument('1.0', 'UTF-8').startElement(function() {
return 'tasks';
});
for(var i in result.tasks.task) {
var task = xmlTaskToObject(result.tasks.task[i]);
writeTaskToXml(xw, task);
}
req.body.index = (result.tasks.task !== undefined) ? result.tasks.task.length : 0;
writeTaskToXml(xw, req.body);
xw.endElement();
ws.end();
res.send('');
});
});
};
exports.tasks = function(req, res){
var tasks = [];
fs.readFile(xmlPath, function(err, data) {
if(err){
throw err;
}
parser.parseString(data, function (err, result) {
console.log("AFTER PARSER");
// parsing stuff
/*
...
*/
res.render('tasks', { tasks: tasks });
});
});
};
「AFTER PARSER」はコンソールに表示されず、例外はスローされません...
問題を解決するために私が見つけた唯一の方法は、次のように、タイムアウトを指定して 2 番目の ajax 呼び出しを行うことです。
$.post('/addTask', function(){
setTimeout(loadTasks, 100);
});
誰かが私に何が悪いのか教えてくれますか? ファイルアクセスの問題かそのようなものだと思います。
ありがとう !