在JS中写入文件时如何解决“意外令牌:”错误

时间:2019-10-11 20:24:59

标签: javascript node.js discord.js

我目前正在为我的服务器开发一个新的discord机器人,我刚刚开始利用.js文件存储永久数据。我已经建立了一个通过输入“ [Finished]等...来记录突袭参与者的系统...如果我要存储数据的.js文件为空,则一切正常,所有数据均已正确写入文件。” ,如果漫游器重新启动,然后.js文件已经包含其他与会者的数据,而我尝试将新数据写入该文件,则会引发“意外令牌”错误。

我尝试使用fs.writeFileSync(),但似乎无法解决问题,我进行了大量研究,但似乎找不到针对我问题的具体答案。

要写入的空文件

{

}

数据已经存在时的文件:

{
    "2887482348774": {
        "amount": 1
    },
    "1746782476348": {
        "amount": 1
    }
}

伪造的伪造ID。

命令代码:

const Discord = require('discord.js');
const fs = require('fs');

module.exports.run = async (bot, message, args) => {
  bot.msgs = require("./raiddata/raidattendance.js");
  if (message.channel.id !== '631620937418145802') return;
  if (!message.member.roles.some(r => ["Raider in Command", "Permissions"].includes(r.name))) return;

  for (let attenders of message.mentions.users.keyArray()) {
    message.channel.send(`Found user: ${attenders}`);
    bot.msgs [attenders] = {
      amount: 1
    }
    console.log("Works");
    fs.writeFileSync ('./commands/raiddata/raidattendance.js', JSON.stringify (bot.msgs, null, 4), err => {
      if (err) throw err;
    });
    message.channel.send(bot.msgs[attenders].amount);
  }
}

module.exports.config = {
  command: "finished]"
}

我希望代码仅从中断处继续写入文件,但事实并非如此。这是我得到的错误:

8 commands found.
Command announcement.js loading...
Command changelog.js loading...
Command delete.js loading...
Command lock.js loading...
Command lograid.js loading...
Command notice.js loading...
Command raid.js loading...
Command unlock.js loading...
Bot is now running.
(node:6896) UnhandledPromiseRejectionWarning: C:\Users\Removed\Downloads\Removed\Removed\commands\raiddata\raidattendance.js:2
    "1746782476348": {
                   ^

SyntaxError: Unexpected token :
    at Module._compile (internal/modules/cjs/loader.js:721:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:690:17)
    at require (internal/modules/cjs/helpers.js:25:18)

1 个答案:

答案 0 :(得分:0)

问题是您正在使用require()来读取扩展名为.js的json文件。这是不期望的。如果您将文件更改为具有.json扩展名,它将解决此问题。

您可能想使用fs模块而不是require()来读取文件,因为它将提供更大的灵活性和更好的实践。