Next js - 如何在 url 中为 api 传递多个参数?

Posted

技术标签:

【中文标题】Next js - 如何在 url 中为 api 传递多个参数?【英文标题】:Next js - How to pass multiple parameters in url for api? 【发布时间】:2020-11-24 02:41:04 【问题描述】:

我能够传递一个参数并从下一个 js api 获取结果

文档非常有帮助 - https://nextjs.org/docs/api-routes/dynamic-api-routes

/api/posts/[postId].js

上述方法可行,但是否可以选择传递另一个参数,如下所示?

/api/posts/[postId][userId].js

文件夹名称当前为 [postId]。我尝试将其重命名为 [postId][userId]

我的 api 代码是

  let postVotes = await req.db.collection('votesPosts').count("post":req.query.postId,"user":req.query.userId)

【问题讨论】:

[postId][userId] 没有分隔符,系统将不知道如何将 url 映射到该路由。 也许[postId]/[userId] 可以做到这一点,您将拥有一个名为[userId]index.js 的文件夹,或者只是一个名为[userId].js 的文件,您可以在其中像您一样获取数据跨度> 【参考方案1】:

通常,路由不会处理 URL 路径的单个段中的多个参数。每个段只能有一个参数:

/api/entity/param1/param2/sub/param3

现在在 Next JS 中,您也需要将它们分开以有 2 个带参数的段:

/api/posts/[postId]/[userId]

这将解析为 2 个可能的文件:

/api/posts/postId]/[userId]/index.js

如果你使用参数目录+索引文件,或者

/api/posts/postId]/[userId].js

如果你用参数文件来做。

使用目录 + 索引文件可以添加固定段,例如:

/api/posts/postId]/[userId]/popular.js
/api/posts/postId]/[userId]/private.js

然后,您可以像为 2 个参数所做的那样进行 API 调用。

【讨论】:

你的回答很有道理,所以我必须看看为什么我的第二级 [userId] 给了我 404 但第 1 级有效。可能是下一个 js 想要 [...slug] 或 [...params] 但我必须玩这个 适用于嵌套文件夹结构。谢谢 我认为传播 [...slug] 旨在用于像 javascript 中的无限参数,但在 Next JS 的情况下具有多个段。我并没有真正使用 API 路由,但我在 Next 中经常使用文件系统路由。试着和他们一起玩看看

以上是关于Next js - 如何在 url 中为 api 传递多个参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Strapi API 引用 Next JS 中的图像组件?

使用 Node.js 服务器为 Next.js 授权 Azure 存储服务 REST API - 从 URL 复制 Blob

如何处理调用 API 的 Next.js 中动态路由的未找到 404?

如何隐藏通过 url 直接访问的 nextjs api 路由?

sass 在 bootstrap5 中为 next.js 覆盖默认颜色?

如何在 vue.config.js 中为生产设置 API 路径?