【发布时间】: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 的操作。
manipulate.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
}
现在,我得到的错误是......
【问题讨论】:
-
它是说我怎样才能捕捉到错误,但在我的情况下,我知道我无法找到
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