首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError: fs.readFileSync不是Next.js中的函数

TypeError: fs.readFileSync不是Next.js中的函数
EN

Stack Overflow用户
提问于 2022-02-08 20:05:50
回答 2查看 2.5K关注 0票数 0

在JSON文件中,我在total.json中为机器人保存数据。

代码语言:javascript
运行
复制
{ "guilds": 3, "users": 21 }

在我的index.tsx中,我想将这些数据放在页面中,所以我尝试如下:

代码语言:javascript
运行
复制
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),但在我的页面中,我发现了以下错误:

代码语言:javascript
运行
复制
TypeError: fs__WEBPACK_IMPORTED_MODULE_6___default(...).readFileSync is not a function
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-08 20:19:03

您只能在节点js中使用fs模块,不能在浏览器中使用。要从Nextjs中的文件中访问JSON数据,可以使用axios获取。下面是一个使用axios的示例

代码语言:javascript
运行
复制
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;
  }
票数 2
EN

Stack Overflow用户

发布于 2022-02-08 21:07:37

正如@JaivBhup已经提到的,您不能使用fs,因为它是不兼容浏览器的

一个更好的方法是使用后端并从中获取数据(axios是一个很好的包)。如果您没有某种后端,则应该考虑使用Next.js api路由。

你可以像一直在使用Node.js!一样使用它

请参阅文档对您也有帮助。

代码语言:javascript
运行
复制
// 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文件而不是文件名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71040231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档