gpt4 book ai didi

Javascript Node.js 完全覆盖文件

转载 作者:行者123 更新时间:2023-11-30 16:24:24 25 4
gpt4 key购买 nike

我有一个应用程序需要一个 data.json 文件来绘制 d3-graph。但是我需要在 onClick 事件上更新该文件:

d3.select("#updatebutton").on("click", function(e) {
try{
$.get('https://localhost:4444/data', function(data) {
});
}
catch (e) {
alert('Error: ' + e);
}
});

上面是带有 jquery 调用的更新按钮。在我的 app.js 文件中,我是这样使用它的:

app.get('/data', function(req, res, next) {
try{
getJSON();
}
catch(e) {
alert('Error');
}

});

getJSON() 函数通过 https 请求接收数据,处理该数据并将其保存到 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/Catch around 回调函数。

阅读:https://strongloop.com/strongblog/async-error-handling-expressjs-es7-promises-generators/

关于Javascript Node.js 完全覆盖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34330779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com