【问题标题】:Nextjs API works in local environment but not in production environmentNextjs API 在本地环境中有效,但在生产环境中无效
【发布时间】:2022-01-17 14:27:46
【问题描述】:

[已解决]

我在 NextJS 中创建了一个dynamic API 路由,如果给定一个filename,服务器将读取content 目录下的文件(.md.txt 文件),将其转换为字符串并返回它。 API 在local 环境中按预期工作,但是在Vercel 中部署的网站不适用于此 API 路由。

对于存在于content 目录中的文件,该API 路由返回500 internal server error

控制台错误是:

Failed to load resource: the server responded with a status of 500 ()

检查路线的vercel日志,显示如下:

ERROR Error: ENOENT: no such file or directory, open 'content/phase1_section1.md'

我认为path.join() 不适合我。它不是在内容部分前面添加应用程序的实际域名。我该如何解决这个问题?

还有,这是code

import { readFileSync } from 'fs';
import path from "path";

export default function courseHandler({ query: { slug } }, res) {
    const fullPath = path.join('./content/', slug);
    const content = readFileSync(fullPath, 'utf8');
    if (content) {
        res.status(200).json({
            content: content
        });
    } else {
        res.status(404).json({ message: `Course with slug: ${slug} not found.` })
    }
}

【问题讨论】:

  • 500 错误可以是任何东西。您可以查看 Vercel 中的日志吗?
  • 是的,刚刚检查过。我认为这条路不适合我。 ERROR 错误: ENOENT: no such file or directory, open 'content/phase1_section1.md' 它没有在内容部分前面添加应用程序的实际域名。我该如何解决这个问题?
  • 你能在你的API运行的环境中找到content/phase1_section1.md吗?
  • 感谢您的评论。我解决了这个问题。问题出在文件路径上。

标签: reactjs next.js fetch vercel


【解决方案1】:

问题其实已经解决了。

我刚换了这个

path.join('./content/', slug);

有了这个

path.join(process.cwd(), 'content', slug);

【讨论】:

  • 我看到你解决了。干得好
【解决方案2】:
  1. 在 Vercel 上查看日志
  2. 在 Vercel 上为每个环境配置您的 .env variables
  3. 检查您的本地.env 文件。如果您对 .env 变量进行硬编码 - 这将产生负面影响。

【讨论】:

  • 感谢您的评论。我正确设置了变量。但问题出在文件路径上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
相关资源
最近更新 更多