使用next 3,我正在努力做一些看起来很简单的事情:我想从next/nitro提供的api中获得餐厅列表,以便在客户端使用它。我的原始文件是.csv
文件,存储在assets/
:assets/list.csv
下。
这是我在我的组件.vue
文件:
//...
const { restaurants } = await useFetch('/api/restaurants')
//...
和server/api/restaurants.js
的内容:
import csv from 'csvtojson'
export default defineEventHandler(async(event) => {
const data = await csv().fromFile('~/assets/list.csv')
return { data }
})
但是我得到一个错误"[500]文件不存在"。我试过很多变体,但总是在这里或那里得到一个错误。你能帮我想出解决办法吗?谢谢。
实际解决,实现如下:
- 如文档所示,
assets/
目录用于由打包器(Vite或Webpack)处理的资源。next不会提供assets/
目录下的文件,除非nuxt.config.ts
配置了适当的加载器(例如csv加载器)。因此出现了500错误。 另一方面, - next Content用于自动解析位于
content/
目录下的.csv文件:- In
nuxt.config.ts
:
- In
modules: ["@nuxt/content"]
- 在组件
.vue
文件中,以下命令将在data.body
中公开已解析的csv:
const { data } = await useAsyncData("list", () => queryContent("/list").findOne())
next的美妙之处在于你不需要导入任何东西,它会为你完成。