Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用fs读取文件后解析Json_Javascript_Node.js_Events_Asynchronous_Fs - Fatal编程技术网

Javascript 使用fs读取文件后解析Json

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

我正在尝试在两个node.js脚本之间建立通信。 第一个执行get请求并将响应写入文件。 第二个在更改后查看文件,然后他读取它,并提示结果

第一个(获取然后写入)

第二个(更改后观察、读取和提示)

第一次更改文件时,一切正常!但30秒后,在第二次更改时,我得到以下错误:

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);
}