JMR*_*Dev 6 api fs node.js next.js vercel
我需要在 NextJS 中的 API 路由上使用 fileStystem 方法作为 readdirSync。它在本地工作,但部署在 Vercel 上时,请求会以 500 状态代码进行响应。
\n这是 Vercel 的功能日志:
\ncatch Error: ENOENT: no such file or directory, scandir \'/var/task/_posts\'\n at Object.readdirSync (fs.js:1043:3)\n at getAllArticles (/var/task/.next/server/chunks/230.js:135:67)\n at __WEBPACK_DEFAULT_EXPORT__ (/var/task/.next/server/pages/api/search.js:37:93)\n at Object.apiResolver (/var/task/node_modules/next/dist/server/api-utils.js:101:15)\n at processTicksAndRejections (internal/process/task_queues.js:95:5)\n at async Server.handleApiRequest (/var/task/node_modules/next/dist/server/next-server.js:770:9)\n at async Object.fn (/var/task/node_modules/next/dist/server/next-server.js:661:37)\n at async Router.execute (/var/task/node_modules/next/dist/server/router.js:205:32)\n at async Server.run (/var/task/node_modules/next/dist/server/next-server.js:841:29)\n at async Server.handleRequest (/var/task/node_modules/next/dist/server/next-server.js:292:20) {\n errno: -2,\n syscall: \'scandir\',\n code: \'ENOENT\',\n path: \'/var/task/_posts\'\n}\nRun Code Online (Sandbox Code Playgroud)\n这是 API 路由本身 (/pages/api/search.ts):
\ncatch Error: ENOENT: no such file or directory, scandir \'/var/task/_posts\'\n at Object.readdirSync (fs.js:1043:3)\n at getAllArticles (/var/task/.next/server/chunks/230.js:135:67)\n at __WEBPACK_DEFAULT_EXPORT__ (/var/task/.next/server/pages/api/search.js:37:93)\n at Object.apiResolver (/var/task/node_modules/next/dist/server/api-utils.js:101:15)\n at processTicksAndRejections (internal/process/task_queues.js:95:5)\n at async Server.handleApiRequest (/var/task/node_modules/next/dist/server/next-server.js:770:9)\n at async Object.fn (/var/task/node_modules/next/dist/server/next-server.js:661:37)\n at async Router.execute (/var/task/node_modules/next/dist/server/router.js:205:32)\n at async Server.run (/var/task/node_modules/next/dist/server/next-server.js:841:29)\n at async Server.handleRequest (/var/task/node_modules/next/dist/server/next-server.js:292:20) {\n errno: -2,\n syscall: \'scandir\',\n code: \'ENOENT\',\n path: \'/var/task/_posts\'\n}\nRun Code Online (Sandbox Code Playgroud)\n这是getAllArticles()其中使用的函数:
export default (req: NextApiRequest, res: NextApiResponse) => {\n const { query } = req;\n\n try {\n if (query.q) {\n const posts = getAllArticles(ArticleTypes.POSTS, [\'slug\', \'href\', \'title\', \'category\'], {\n hints: {\n hint: query.q as string,\n fields: [\'title\', \'category\'],\n },\n }).map((post) => post.data);\n\n const projects = getAllArticles(ArticleTypes.PROJECTS, [\'slug\', \'href\', \'title\', \'category\', \'technologies\'], {\n hints: {\n hint: query.q as string,\n fields: [\'title\', \'category\', \'technologies\'],\n },\n }).map((project) => project.data);\n\n res.status(200).json({\n ...(posts.length > 0) && { posts },\n ...(projects.length > 0) && { projects },\n });\n } else {\n res.status(422).send(\'El par\xc3\xa1metro "q" es necesario.\');\n }\n } catch (e) {\n res.status(500).send(\'Ha ocurrido un error mientras se intentaba hacer la b\xc3\xbasqueda.\');\n }\n};\nRun Code Online (Sandbox Code Playgroud)\n所以我目前正在使用它fs.readdirSync来读取 .mdx 文件。正如我之前指出的,它在本地运行得很好,但在部署到 Vercel 上时就不行了。我需要配置任何类型的配置文件或其他内容吗?
太感谢了!
\n| 归档时间: |
|
| 查看次数: |
2555 次 |
| 最近记录: |