在 Next.js 动态 api 路由中使用 req.params 与 req.query

using req.params vs req.query in Next.js dynamic api routes

我正在尝试访问我的 Next.js API 路由中的参数。我只是想知道为什么为了访问某个动态路由 id 我必须使用 req.query 而通常在 express 中我会通过 params 访问 idreq.query 是访问 id 的正确方法吗?

我有以下 api 文件夹结构。

/pages
  /api
    /posts
      -index.js
      -[postId].js

在我的 [postId] 文件中,我有以下内容

function handler(req, res) {
  // shows undefined
  console.log(req.params);
  const postId = req.params.postId;

我的api调用如下:

fetch(`/api/posts/${id}`)

参考nextJs docs,所有示例均使用req.query获取id或其他参数:

import { useRouter } from 'next/router'

const Post = () => {
  const router = useRouter()
  const { pid } = router.query

  return <p>Post: {pid}</p>
}

export default Post

所以这种方法没有错。

Nextjs 没有明确说明为什么他们使用 query 而不是 params,但是在关于 dynamic routes 的部分中你可以得到一些线索:

the route /post/abc?foo=bar will have the following query object:

{ "foo": "bar", "pid": "abc" }

可能他们使用查询作为一种在一个对象中加入参数和查询的方式,或者使用这种方式更方便,因为没有关于它的参考,你不必太在意,只需使用查询并开心。