[英]Node.js JsonParser custom function "cannot read property of undefined"
我正在嘗試制作一個 JSON 函數,該函數能夠從 JSON 文件中為多個其他函數返回解析后的數據,而無需一遍又一遍地重寫相同的代碼。 這是我擁有的函數以及一個變量:
var fs = require('fs');
function jsonParser(jsonFile) {
fs.readFile(jsonFile,
function (err, data) {
var jsonData = data;
var jsonParsed = JSON.parse(jsonData);
return jsonParsed;
})
};
當我在這個函數中插入一個console.log
進行測試時,它從jsonParsed
返回數據,沒有任何問題。 以下是此函數將被使用的方式+位置的一個示例:
msg.channel.send(jsonParser('package.json').version);
這是正在加載的 JSON 文件:
{
"name": "discord-bot",
"version": "0.4.0",
"description": "Mírre from The Autorise Domain recreated as a Discord bot",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
}
}
我嘗試了多種方法來嘗試獲取“版本”數據,但它每次都返回相同的“無法讀取未定義的‘版本’的屬性”消息。 我希望能夠通過msg.channel.send()
推送對象數據,但這並沒有發生——就好像程序在到達發送函數時已經將對象從內存中擦除了一樣。
任何幫助將不勝感激!
編輯:該函數在Discord.Client()
消息函數中被調用。 將 bot 定義為const bot = new Discord.Client()
,使用jsonParser
的命令從一個大的bot.on('message'...
函數中調用。從這里開始,有多個的 switch-case某人可以給機器人的命令,其中之一用於查找機器人的版本;這是調用jsonParser
地方。
正如我所評論的,更改為fs.promises
沒有問題:
const fs = require('fs');
const path = require('path');
async function jsonParser(jsonFile) {
const data = await fs.promises.readFile(path.resolve(__dirname, jsonFile));
var jsonData = data.toString('utf-8');
var jsonParsed = JSON.parse(jsonData);
return jsonParsed;
};
(async function (jsonFile) {
const data = await jsonParser(jsonFile);
console.log(data.version);
})('./test.json').catch(e => {
console.log(e);
});
由於此代碼用於 Discord 機器人,因此請確保客戶端的.on
函數使用async()
如下所示:
const bot = new Discord.Client();
...
bot.on('message', async(msg) => {...}
如果在執行期間 JSON 中的任何內容都沒有發生變化(在 package.json 的情況下不應該發生變化),您可以繼續使用 require。
const { version } = require('./package.json');
...
msg.channel.send(version);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.