首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个Node.JS脚本在一个.JSON文件上读/写,但是第一个脚本不能修改该文件

两个Node.JS脚本在一个.JSON文件上读/写,但是第一个脚本不能修改该文件
EN

Stack Overflow用户
提问于 2017-12-29 02:05:51
回答 1查看 404关注 0票数 0

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

代码语言:javascript
复制
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')
})

Activity.js的代码是:

代码语言:javascript
复制
const Discord = require("discord.js");
var fs = require('fs');
var data = fs.readFileSync('/home/discord/activity_bot/users.json', 'utf-8')
var arxeio = JSON.parse(data)
...
var kuklos = setInterval(function(done) {
        client.guilds.get('323921290543235073').channels.forEach(function(kanali, kanaliID) {
          if (kanali.type === 'voice' && !kanali.name.includes("AFK")) {
            kanali.members.forEach(function(melos, melosID) {
              let xristis = melos.user.username;
              if (arxeio[xristis]) {
                arxeio[xristis]++;
              } else {
                arxeio[xristis] = 1
              }
              fs.writeFile('/home/discord/activity_bot/users.json', JSON.stringify(arxeio, null, 2), 'utf-8', function(err) {
                  if (err) throw err
              })
            })
          }
        })
      }, 60*1000);

在这里,duos是一个成员的表。我的结论是,问题在于App.js中的App.js,因为当activity.js不运行时,它会工作。当activity.js运行时,“输入”确实记录在app.js中,但是文件没有被修改。而且,+=命令上面和下面的两个命令都显示它被修改了,但没有保存在users.Json文件中。知道该怪什么吗?(除了我的技巧:P )

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-29 19:36:12

我认为问题在于你的应用程序设计。您绝对可以与两个进程共享一个文件,但始终存在并发问题。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48016562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档