[英]Javascript Node.js overwrite File completely
我有一个需要data.json
文件才能绘制d3图的应用程序。 但是我需要在onClick
-Event上更新该文件:
d3.select("#updatebutton").on("click", function(e) {
try{
$.get('https://localhost:4444/data', function(data) {
});
}
catch (e) {
alert('Error: ' + e);
}
});
上面是带有jquery调用的update-Button。 在我的app.js
文件中,我像这样使用它:
app.get('/data', function(req, res, next) {
try{
getJSON();
}
catch(e) {
alert('Error');
}
});
getJSON()
-Function通过https-Request接收数据,处理该数据并将其保存到data.json
:
function getJSON() {
var req = https.get(options, function(response) {
// handle the response
var res_data = '';
response.on('data', function(chunk) {
res_data += chunk;
});
response.on('end', function() {
//process data
// save to file
fs.writeFile(filePath, JSON.stringify(finalJson), function(err) {
if (err)
throw err;
});
});
});
}
但是,如果我几秒钟后反复单击我的updateButton
,似乎data.json
不会被覆盖,但是文件越来越大,这意味着数据将被添加到文件中而不是被覆盖。
我究竟做错了什么?
感谢帮助。
由于您使用app.get作为路线,所以我猜您正在使用express。
在您的路线定义中:
var getData = (function() {
var callbacks = [];
function executeCallbacks(err, data) {
for (var i = 0; i < callbacks.length; i++) {
callbacks[i](err, data);
}
callbacks = [];
}
return function(cb) {
callbacks.push(cb);
if( callbacks.length === 1 ) {
var req = https.get(options, function(response) {
// handle the response
var res_data = '';
response.on('data', function(chunk) {
res_data += chunk;
});
response.once('end', function() {
// process data here
// save to file
fs.writeFile(filePath, JSON.stringify(finalJson), function(err) {
if (err) {
// call error handler
return executeCallbacks(err);
}
executeCallbacks(null, body);
});
});
response.once('error', function() {
return executeCallbacks(err);
});
}
req.end();
}
};
})();
app.get('/data', function(req, res, next) {
getData(function(err, data) {
if(err) {
return next(err);
}
return data;
});
});
在浏览器js文件中:
d3.select("#updatebutton").on("click", function(e) {
$.get( 'https://localhost:4444/data', function(data) {
alert( "success" );
var json = JSON.parse(data);
})
.fail(function() {
alert( "error" );
});
});
我看到您使用try / catch回调函数。 原始函数完成后,将触发回调函数。 因此,请勿使用Try / Catcharound回调函数。
阅读: https : //strongloop.com/strongblog/async-error-handling-expressjs-es7-promises-generators/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.