在JSON文件中,我在total.json
中为机器人保存数据。
{ "guilds": 3, "users": 21 }
在我的index.tsx
中,我想将这些数据放在页面中,所以我尝试如下:
import fs from 'fs';
function stats() {
const botcount = JSON.parse(fs.readFileSync(`../util/total.json`, { encoding: 'utf8' }));
const userscount = botcount.users;
console.log(userscount);
return userscount;
}
在终端中,函数正确地返回了数字(21),但在我的页面中,我发现了以下错误:
TypeError: fs__WEBPACK_IMPORTED_MODULE_6___default(...).readFileSync is not a function
发布于 2022-02-08 20:19:03
您只能在节点js中使用fs
模块,不能在浏览器中使用。要从Nextjs中的文件中访问JSON数据,可以使用axios或获取。下面是一个使用axios
的示例
import axios from 'axios';
async function stats() {
var {data} = await axios.get("http://localhost:8888/utils/total.json");//Change this to your url
const botcount = JSON.parse(data)
const userscount = botcount.users;
console.log(userscount);
return userscount;
}
发布于 2022-02-08 21:07:37
正如@JaivBhup已经提到的,您不能使用fs
,因为它是不兼容浏览器的。
一个更好的方法是使用后端并从中获取数据(axios
是一个很好的包)。如果您没有某种后端,则应该考虑使用Next.js api路由。
你可以像一直在使用Node.js!一样使用它
// File: pages/api/my-json.js
import fs from 'fs'
import path from 'path'
export default (req, res) => {
// Let's say your json is in /public/assets/my-json.json
const filePath = path.resolve('./public', 'assets', 'my-json.json');
const json = fs.readFileSync(filePath);
res.statusCode = 200
res.json(json);
}
重要的部分是
path.resolve(...)
,它指示vercel将扫描路径包含在无服务器的lambda中。所示代码可以在vercel上本地和远程读取图像(或从fs中读取其他文件)。
我稍微调整了一下,所以它加载json文件而不是文件名。
https://stackoverflow.com/questions/71040231
复制相似问题