node.js - Node.js 从磁盘读取文件
问题描述
我想在discord状态下写NP音乐。Google Play 音乐桌面播放器有一个playback.json 文件,我需要在我的node.js 中检查这个文件,并在不和谐状态下更改音乐。此刻我有这个代码来检查这个文件
const fs = require(`fs`)
var song = [];
check();
function check() {
fs.readFile("C:\\Users\\lensh\\AppData\\Roaming\\Google Play Music Desktop Player\\json_store\\playback.json", (err, data) => {
let playback = JSON.parse(data)
console.log(`Checking...`)
if(playback.playing !== `true`) return setTimeout(() => {check()}, 10000), console.log(`IDLE.`), idle();
else {
if(song.includes(playback.song.title)) return setTimeout(() => {check();}, 10000), console.log(`Waiting...`), console.log(song), console.log(playback.song.title);
else {
song.splice(0, song.length);
song.push(playback.song.title);
status(playback.song.artist, playback.song.title);
setTimeout(() => {check();}, 15000)
}
}
});
}
问题是 node.js 仅在启动时读取文件,然后 node.js 没有检查此文件是否有任何更改。如何解决这个问题呢?
PS对不起我的英语
解决方案
您无需手动操作。您可以使用 node.js 监视文件 API 并在更改时加载文件。
const fs = require("fs")
let lastUpdated = new Date()
fs.watchFile("./test.json", (curr, prev) => {
if(curr.mtime.getTime() - lastUpdated.getTime() > 2 *1000) { // after 2 min
// DO something here
console.log(`the current mtime is: ${curr.mtime}`);
lastUpdated = curr.mtime
}
})
参考: https ://nodejs.org/docs/latest/api/fs.html#fs_fs_watch_filename_options_listener
推荐阅读
- c# - 从 C# 或 AngularJS 中的另一个 URL 获取数据
- asp.net - 用户代码未处理的安全异常
- c# - C# UWP - 如何在运行时将附加参数传递给事件处理程序
- python - matplotlib 极坐标散点图:如何将单位更改为度数?
- java - 如何在 2 个项目之间共享存储库和服务类
- java - 理解没有参数但有类变量的Java构造函数
- c++ - OpenMP 积分图像比顺序图像慢
- ios - 擦除 CAShapeLayer 中的所有内容
- html - 不同客户端窗口大小的 HTML 表大小调整
- php - 如何正确从 xml 读取数组与 json 转换为 php 数组