Javascript 使用fs读取文件后解析Json
我正在尝试在两个node.js脚本之间建立通信。 第一个执行get请求并将响应写入文件。 第二个在更改后查看文件,然后他读取它,并提示结果 第一个(获取然后写入) 第二个(更改后观察、读取和提示) 第一次更改文件时,一切正常!但30秒后,在第二次更改时,我得到以下错误:Javascript 使用fs读取文件后解析Json,javascript,node.js,events,asynchronous,fs,Javascript,Node.js,Events,Asynchronous,Fs,我正在尝试在两个node.js脚本之间建立通信。 第一个执行get请求并将响应写入文件。 第二个在更改后查看文件,然后他读取它,并提示结果 第一个(获取然后写入) 第二个(更改后观察、读取和提示) 第一次更改文件时,一切正常!但30秒后,在第二次更改时,我得到以下错误: undefined:1 SyntaxError: Unexpected end of input at Object.parse (native) at /Users/adobe/Documents/works
undefined:1
SyntaxError: Unexpected end of input
at Object.parse (native)
at /Users/adobe/Documents/workspace/playWithNode/watchFile.js:17:23
at tryToString (fs.js:414:3)
at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:401:12)
我认为异步读写文件有问题,但没有找到解决办法。。。
每个人都能帮助我还是有线索?谢谢尝试将第二个文件中的代码更改为
var result;
try {
result = JSON.parse(data);
} catch (err) {
console.error(err, data);
}
因为SyntaxError:输入意外结束
是JSON.parse错误
在第一个文件中,我看到了潜在的问题
fs.writeFile(输出偏差、数据、函数(错误){…
回调函数必须提供有序写入,但只记录代码错误
Node.js文档
请注意,在同一文件上多次使用fs.writeFile
而不等待回调是不安全的。对于这种情况,强烈建议使用fs.createWriteStream
…不鼓励异步访问文件系统,因为在访问时,目标文件可能会被应用程序生命周期中的某些内容修改 我建议您使用
fs.readFileSync
,并将JSON.parse
包装在一个try-catch中
var fs=require('fs');
函数onNextTrain(数据){
控制台日志(“onNextTrain”,数据);
返回数据;
}
fs.watch(输出离开,(事件类型,文件名)=>{
返回新承诺((解决、拒绝)=>{
如果(!filename){
返回拒绝(“未提供文件名”);
}
让
data=fs.readFileSync(文件名为“utf8”),
结果
;
试一试{
result=JSON.parse(数据);
}捕获(错误){
结果=数据;
}
返回解析(结果);
})
.然后(下一班火车)
.catch(err=>console.log(“error”,err))
;
});
只需使用resolve(结果)而不是数据更新它即可:)
undefined:1
SyntaxError: Unexpected end of input
at Object.parse (native)
at /Users/adobe/Documents/workspace/playWithNode/watchFile.js:17:23
at tryToString (fs.js:414:3)
at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:401:12)
var result;
try {
result = JSON.parse(data);
} catch (err) {
console.error(err, data);
}