如何解决Next.js API模块中出现的ENOENT错误问题?
问题修复方案
报错原因
- 核心错误为ESM模块化规范下不支持CommonJS专属的
__dirname变量,Next.js的API路由默认采用ESM规范,原有Node.js CommonJS写法不兼容 - 前端代码中误将axios返回的
status属性作为方法调用,也会触发运行错误 - 部分环境API路由请求路径大小写敏感,当前代码的路径和文件名大小写不匹配可能额外触发404错误
修复步骤
1. 修改/store/manipulate.js路径解析逻辑,适配ESM规范
替换原有require导入和__dirname写法,代码如下:
import path from 'path' import fs from 'fs' import { fileURLToPath } from 'url' // 兼容ESM规范获取当前文件目录 const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) const readData = () => { const data = JSON.parse(fs.readFileSync(path.join(__dirname, 'store.json'))) return data } export const fetchFeaturedEvents = () => { let data = readData() const result = data.filter(event => event.isFeatured) return result }
2. 修复Homepage.jsx中status判断的错误写法
axios返回的status是数字属性而非方法,修改判断逻辑:
// 原有错误写法 // if (res.status(200)) { // 修正后写法 if (res.status === 200) {
3. 可选:统一API路由大小写避免部署问题
将/pages/api/getFeaturedEvents.js重命名为全小写的getfeaturedevents.js,或者将前端请求路径改为/api/getFeaturedEvents,保证路径和文件名大小写完全匹配,避免Linux等大小写敏感环境下出现404错误。
内容的提问来源于stack exchange,提问作者D_Gamer
相关产品推荐
相关产品推荐

