为node.js制作Discord Bot JSON.parse()错误:undefined:1

时间:2017-09-12 13:30:54

标签: node.js

我想制作Discord Bot。

我使用Node.js和Discord api。

我的错误:

C:\----\----\Desktop\SiiNaBot>node app.js
undefined:1
SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at Object.<anonymous> (C:\Users\Lin\Desktop\SiiNaBot\app.js:7:21)
at Module._compile (module.js:573:30)
at Object.Module._extensions..js (module.js:584:10)
at Module.load (module.js:507:32)
at tryModuleLoad (module.js:470:12)
at Function.Module._load (module.js:462:3)
at Function.Module.runMain (module.js:609:10)
at startup (bootstrap_node.js:158:16)
at bootstrap_node.js:598:3

我的电话:

//Calling the pakage
const Discord = require('discord.js');
const bot = new Discord.Client();
const fs = require('fs');

// JSON Files
let userData = JSON.parse(fs.readFileSync('Storage/userData.json', 'utf8')); // This calls the JSON file.

//Listener Event : Message Received ( This wiil run every time a message is recived)
bot.on('message', message => {
  //Variables
  let sender = message.author; // The person who sent th message
  let msg = message.content.toUpperCase(); // Takes the message, and makes it all uppercase
  let prefix = '>' // The test before commands, you can set this to what ever you want

  //Event
  if(!userData[sender.id + message.guild.id]) userData[sender.id + message.guild.id] = {} // This creates a json file for their user + guild, if one is not made already.
  if(!userData[sender.id + message.guild.id].money) userData[sender.id + message.guild.id].money = 1000; // This creates a money object for them if they start out with, you can change this to whatever you want.

  fs.writeFile('Storage/userData.json', JSON.stringify(userData), (err) => { 
//This writes the changes we just made to the JSON file.
    if (err) console.error(err);
  })
  // Commends

  //Ping
  if (msg === prefix + 'PING'){
    message.channel.send('Pong!') // Sends a message to the chanel, with the contens: "Pong!"
  }




})

// This code runs when the bot turns on
bot.on('ready', () => {
  console.log('Economy Launched...')
})


// Login

bot.login('I`ll write code my bot token'); 
//Don`t let people see this code, people can control your bot, including the servers your bot has admin on.

我的文件夹

Structure of my folder here

我认为这个错误就是这一行

让userData = JSON.parse(fs.readFileSync(&#39; Storage / userData.json&#39;,&#39; utf8&#39;))

和...

fs.writeFile(&#39; Storage / userData.json&#39;,JSON.stringify(userData),(err)=&gt; {//这会将我们刚才所做的更改写入JSON文件。     if(err)console.error(err);   })

这一行。但我不知道如何修理这根绳子。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

错误消息来自第一个,而不是第二个,因为它试图解析您的JSON数据。您可以在错误的调用堆栈中识别此信息:

at Object.<anonymous> (C:\Users\Lin\Desktop\SiiNaBot\app.js:7:21)

正在处理您的app.js第7行,字符位置21,与JSON.parse( ... )方法相对应。

但是,您的错误不在于此应用程序代码:到目前为止这很好!投诉涉及其消耗的JSON数据文件,因此错误消息:“ JSON 输入的意外结束”(这是从您的parse()方法发出的错误消息)。

此外,它通过您的JSON逐行解析,并寻求JSON对象定义的结束,但文件首先结束!那个JSON文件有什么问题?好吧,缺少的是报告为错误消息的undefined,就像调用堆栈中的位置一样,:1将此标识为字符位置1处的缺失内容 - 也就是说,它我希望在光标处找到一个位于该行第一个字符处的字符,而不是遇到标记。

Storage/userData.json中的JSON对象定义需要包含在自定义数据的属性中,因此,我可以肯定您已经省略了终止该JSON对象的定义,以及最后可能遗漏的内容。行是:

}

因此,只需在userData.json中添加最后一行即可解决数据输入文件问题。 (例如,请参阅this gist,并将userData.json的内容/结构与设置中描述的config.json进行比较

答案 1 :(得分:0)

我使用了与您使用的完全相同的教程。有一种非常简单的方法可以解决这个问题。只需进入你的userData.json并输入&#34; {}&#34;我对完全相同的错误消息有完全相同的问题,并修复了它。