两个Node.JS脚本在单个.JSON文件上读/写,但第一个脚本无法修改该文件

时间:2017-12-29 02:05:52

标签: javascript json node.js discord discord.js

我在Ubuntu服务器上的Node.JS中运行了两个discord机器人(app.js和activity.js)。我面临的问题是,当它们都运行时,只有activity.js能够修改文件。该文件是users.JSON。 app.js的代码:

chere

Activity.js的代码是:

const Discord = require("discord.js")
var moment = require("moment")
var data_users = fs.readFileSync('/home/discord/activity_bot/users.json', 'utf-8')
var arxeio = JSON.parse(data_users)
...
for (var i in duos) {
  if (arxeio[duos[i].username]) {
     console.log(`before: ` + arxeio[duos[i].username])
     arxeio[duos[i].username]+=15
     console.log(`after: ` + arxeio[duos[i].username])
  } else {
     arxeio[duos[i].username]=15
  }
}
fs.writeFile('/home/discord/activity_bot/users.json', JSON.stringify(arxeio, null, 2), 'utf-8', function(err) {
  if (err) throw err
  console.log('entered')
})

其中,duos是会员表。 我得出结论,问题是App.js中的fs.writeFile,因为当activity.js没有运行时,它可以工作。当activity.js运行"输入"确实记录在app.js中,但文件未被修改。此外,+ =命令上方和下方的命令都显示它已被修改但未保存在users.Json文件中。知道什么是责任吗? (除了我的技能:P)

1 个答案:

答案 0 :(得分:1)

我认为问题出在您的应用设计中。您绝对可以使用两个进程共享文件,但是您始终会遇到并发问题。

对于这类事情,您必须使用锁定行/表的数据库。