为啥 fs.readFileSync 不会检测到我的 json 文件

Posted

技术标签:

【中文标题】为啥 fs.readFileSync 不会检测到我的 json 文件【英文标题】:Why won't fs.readFileSync detect my json file为什么 fs.readFileSync 不会检测到我的 json 文件 【发布时间】:2020-12-20 02:33:02 【问题描述】:

我正在尝试制作一个可以从我的 JSON 文件中输出某些数据的不和谐机器人,我的项目结构如下所示。

Project
|
+-- data/
|    |
|    +-- compSciCourses.json
|
+-- src/
|    |
|    +-- search.js
|    +-- bot.js
|
+-- test/
|    | 
|    +-- test.js
|
+-- .env
|
+-- package.json
|
+-- package-lock.json

使用 search.js,我正在尝试使用 fs.readFileSync() 像这样读取 JSON 数据

// src/search.js
const fs = require('fs');

let rawdata = fs.readFileSync("../data/compSciCourses.json")
let courseData = JSON.parse(rawdata)

const findClass = (input) => 
       // Some code


module.exports =  findClass 

我正在尝试从我的bot.js 调用函数findClass

// src/bot.js
const  Client  = require('discord.js')
const search = require('./search')
const client = new Client()
...

client.on('message', (message) => 
        ...
        if (CMD_NAME === 'find') 
            if (args.length === 0)
                return message.reply("Please provide course name")
            else
                return message.reply(search.findClass(args))
         
    
)

...

当我使用node src/bot.js 运行此程序时,出现此错误。

fs.js:114
    throw err;
    ^

Error: ENOENT: no such file or directory, open '../data/compSciCourses.json'
    at Object.openSync (fs.js:443:3)
    at Object.readFileSync (fs.js:343:35)
    at Object.<anonymous> (/Users/michaelchang/Desktop/Programming Playground/Machine Learning/ChatBots/discordBot/courseNavigator/src/search.js:3:18)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789: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:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! coursenavigator@1.0.0 start: `node ./src/bot.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the coursenavigator@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/michaelchang/.npm/_logs/2020-09-01T00_25_12_050Z-debug.log

我不明白我是如何得到这个错误的,因为我已经在正确的目录中指定了 JSON 文件。谁能帮帮我???

【问题讨论】:

【参考方案1】:

您可以使用 path.resolve 解析相对于源文件位置而不是当前目录的路径:

const path = require("path");
const file = fs.readFileSync(path.resolve(__dirname, "../data/compSciCourses.json"));

Check this link for further info

【讨论】:

【参考方案2】:

在我的项目中遇到了这个问题 我只是通过导入 .json 文件解决了它

const data = require("../data/compSciCourses.json")

您的 IDE 可能会自动完成路径:)

【讨论】:

以上是关于为啥 fs.readFileSync 不会检测到我的 json 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何为 fs.readFileSync() 捕获没有文件?

Node.JS fs.readFileSync() 错误参数

使用 lambda 部署时 fs.readFileSync 找不到文件

fs.readFileSync无法读取nodejs中的文件传递路径变量

fs.readFileSync 不是文件相关的?节点.js

如何将使用 fs.readFileSync() 的 Node.js 代码重构为使用 fs.readFile()?