在nextjs中生成静态API路由

时间:2020-10-12 19:27:11

标签: javascript next.js

我要通过API公开的文件中包含数据(JSON)。我在构建时就知道数据,但是我不知道如何创建静态API路由,甚至不知道如何通过API路由来静态公开文件。

我为此搜索了两种解决方案:

  • 创建一个返回JSON文件的静态页面(找不到解决方案,它始终返回HTML)。
  • 使用pages / api / [something]生成API(但它似乎总是动态的)。

我的最后一招是尝试通过/pages/api/[something].js上的函数访问文件,但这是动态的而不是静态的。

/pages/api/hello.js文件夹中默认提供的动态功能:

export default (req, res) => {  
  res.statusCode = 200;
  res.json({ name: "John Doe" });
};

这里的典型策略是什么?我觉得我缺少什么。

2 个答案:

答案 0 :(得分:1)

Use the pages/api/[something] to generate the API (but it seems to always be dynamic).

不,它不是动态的。从 [something].js 中,如果您导出 getStaticPath(这将为您生成静态路由)和 getStaticProps(这将从相应的路由中注入要提供的数据), next build 将生成您的静态文件,并准备好用作带有原始 json 数据的 api 页面。

希望这就是您想要解决的问题。

答案 1 :(得分:0)

FWIW,这是我发现动态生成API的动态方式:

// on file /pages/api/[article].js
import { getArticle } from "../../lib/api";

export default (req, res) => {

  // It gets an article from a file, also can be used with getStaticProps
  const article = getPost({article: req.article}); 
  
  res.statusCode = 200;

  // returns the JSON.
  res.json(article);
}

我仍然希望它是静态的,不需要运行任何无服务器功能。