【问题标题】:How can I solve 'ENOENT' error in next.js api section? [duplicate]如何解决 next.js api 部分中的“ENOENT”错误?
【发布时间】:2021-11-29 09:13:04
【问题描述】:

我在 Next.js 项目上工作,在那里我需要使用 api 读取数据,为此我在 /pages/api 目录中创建了 1 个 api 路由,并且 Api 正在使用来自 `/store/manipulate 的函数.js',我已经在我的 api 路由文件中导入了那个特定的函数,但是当我在那个 api 路由上请求时,它给了我一个错误。

因此,下面的组件正在请求该 api 路由上的数据。

Homepage.jsx

import axios from 'axios'
import { useEffect, useState } from 'react'
import EventList from '../components/events/EventList'

const HomePage = () => {

  const [featuredEvents, setFeaturedEvents] = useState([])

  useEffect(() => {
    (async () => {
      const res = await axios.get('/api/getfeaturedevents')

      if (res.status(200)) {
        console.log(res.data)
        setFeaturedEvents(res.data)
        return
      }

      console.log(res.status)
    })()
  }, [])

  return (
    <div>
      <h1>
        The Home Page.
      </h1>
      <EventList items={featuredEvents} />
    </div>
  )
}

export default HomePage

下面的代码就是api路由文件的代码

getFeaturedEvents.js

import { fetchFeaturedEvents } from '../../store/manipulate'

const getFeaturedEvents = (req, res) => {
    if (req.method === 'GET') {
        try {
            const data = fetchFeaturedEvents()

            res.send(data)
        } catch (error) {
            console.log(error)
            res.status(500).send()
        }
    }
}

export default getFeaturedEvents

现在,让我们看一下仅更新同一文件夹中的store.json 的操作。

ma​​nipulate.js

const path = require('path')
const fs = require('fs')

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
}

现在,我得到的错误是......

【问题讨论】:

  • 这能回答你的问题吗? How to capture no file for fs.readFileSync()?
  • 它是说我怎样才能捕捉到错误,但在我的情况下,我知道我无法找到store.js 文件,但为什么呢?这是我的问题。
  • 请检查您的文件是否存在于给定路径中。如果它存在,它会发现不存在。
  • 是的!我的文件确实以store.json 的形式存在于/store 目录中,但是您看到读取该文件的路径已在manipulate.js 中给出,并且我在api 路由文件中导入了manipulate.js 文件;因此,据我了解,如果我在我的 api 路由文件中导入了 manipulate.js 并且 manipulate.js 读取了 store.json 文件,那么我认为当我请求该 api 时,它应该在 /store/ 目录中找到该文件而不是 @ 987654339@ 正如错误照片中的最后一行所暗示的那样!所以我只想知道为什么会这样?
  • @D_Gamer 尝试使用process.cwd() 而不是__dirname(参见Next.js: How to get static assets from within getStaticProps)。

标签: javascript node.js reactjs next.js


【解决方案1】:

就像你说的@juliomalves 我刚刚在manipulate.js 文件中的readData() 方法中将我的__dirname 更改为process.cwd()

类似的东西

const readData = () => {
    const data = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'store', 'store.json')))
    return data
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-14
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2020-01-01
    • 2012-01-14
    相关资源
    最近更新 更多