[英]Discord.js getting data from a JSON file returns “undefined”
我正在尝试从orders.json
文件访问数据。 它应该列出所有orders
,但是,当我尝试这样做时,它会显示“未定义”,如下图所示:
当 JSON 文件中没有任何orders
时,它也会执行相同的操作:
.list
命令的代码:
const fsn = require("fs-nextra");
const Discord = require('discord.js');
module.exports = {
name: 'list',
description: 'List of all orders',
aliases: ['allorders'],
execute(message) {
fsn.readJSON("./orders.json").then((orderDB) => {
let orderString;
for(let x in orderDB) {
orderString = orderString + "`" + x + "`: " + orderDB[x].status + "\n";
// add newline character at the end to display each "order" on a separate line
}
const exampleEmbed = new Discord.MessageEmbed()
.setTitle('Here\'s a list of the current orders and their status.')
.setDescription(orderString)
.setTimestamp()
.setFooter(message.member.user.tag, message.author.avatarURL());
message.channel.send(exampleEmbed);
});
}
}
json 文件中的数据存储如下:
{
"tip": {
"orderID": "tip",
"userID": "734532125021307001",
"guildID": "745409671430668389",
"guild": "Cybers Taco Stand Server",
"channelID": "746423099871985755",
"order": "a",
"customer": "Aro#1221",
"status": "Unclaimed",
"ticketChannelMessageID": "not set"
},
}
这很明显,您定义orderString
但没有为其分配值,然后您做了:
orderString = orderString + "`" + x + "`: " + orderDB[x].status + "\n";
但是orderString
没有定义,所以它肯定会说undefinedtip
。
未赋值的变量是undefined
类型。 当您声明变量orderString
并且不分配值时,它将是undefined
。
不幸的是,JavaScript 允许通过简单地将非字符串转换为字符串来连接不同的类型。 在这种情况下, undefined
将是"undefined"
。
let undef; let str = 'string'; console.log(undef + str)
要解决您的问题,您可以为orderString
分配一个空字符串:
let orderString = '';
检查下面的片段。 我还尝试使用模板文字来简化字符串连接。
const orderDB = { "tip": { "orderID": "tip", "userID": "734532125021307001", "guildID": "745409671430668389", "guild": "Cybers Taco Stand Server", "channelID": "746423099871985755", "order": "a", "customer": "Aro#1221", "status": "Unclaimed", "ticketChannelMessageID": "not set" }, "ysh": { "orderID": "ysh", "userID": "734532125021307001", "guildID": "745409671430668389", "guild": "Cybers Taco Stand Server", "channelID": "746423099871985755", "order": "a", "customer": "Aro#1221", "status": "Ready", "ticketChannelMessageID": "not set" }, } let orderString = ''; for (let key in orderDB) { orderString += `\`${key}\`: ${orderDB[key].status}\n`; } console.log(orderString)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.