【发布时间】:2020-04-27 05:26:47
【问题描述】:
当我的 node express 项目中没有路由器和控制器的文件结构非常简单时,我可以使用 fs-extra 轻松读取并正确返回 json 文件的内容。
但是当我在文件夹中添加一些文件夹(并学习路由器+控制器)时,我现在很难过。
如果我这样做,通过使用 require 变量(我利用 VSCode 的自动完成功能来确保我的文件路径正确):
const fs = require("fs-extra")
const json = require("../../jsons/emojis.json")
exports.getEmojis = async (req, res) => {
try {
const emojis = await fs.readJson(json)
const pretty = JSON.stringify(emojis, null, 4)
res.setHeader("Content-Type", "application/json")
res.send(pretty)
} catch (err) {
console.log("Error fs readJSON: " + err.message)
res.status(500).send({
message: "Error getting emojis."
})
}
}
我收到一个错误:
错误 fs readJSON:“路径”参数必须是字符串类型或 Buffer 或 URL 的实例。收到一个 Object 的实例
而如果我像这样将字符串路径直接放到 readJson 中:
const emojis = await fs.readJson("../../jsons/emojis.json")
我收到一个错误:
错误 fs readJSON: ENOENT: 没有这样的文件或目录,打开 './emojis.json'
编辑:文件路径绝对正确,就像我提到的我使用 VSCode。
emojis.json json 文件位于“jsons”文件夹下,该文件夹距离控制器文件 2 个文件夹。
【问题讨论】:
-
我认为你应该检查路径。仔细看看
-
所以,这个错误显然是由
fs.readJson(json)引起的。这意味着json变量是有问题的。该变量来自const json = require("../../jsons/emojis.json"),这可能意味着json是一个对象,而不是一个字符串,这与你得到的错误一致,它告诉你json是一个对象。当您使用require()读取 JSON 数据时,通常会返回一个对象。