Next.js - 如何在 URL 中传递多个参数用于 API?

8
我能够传递一个参数并从下一个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映射到该路由。 - KeitelDOG
也许一个[postId]/[userId]可以做到这一点,然后你会有一个名为[userId]的文件夹,里面有index.js或者只是一个名为[userId].js的文件,在那里你可以像之前一样获取数据。 - KeitelDOG
这个回答解决了你的问题吗?Next.js中使用多个参数进行动态路由 - NineCattoRules
1个回答

8
通常情况下,路由不会处理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,但第一层可以正常工作。可能是Next.js需要[...slug]或[...params],但我需要尝试一下。 - FKM
1
嵌套文件夹结构下工作正常。谢谢。 - FKM
1
我认为像 JavaScript 中那样传播 [...slug] 是用于无限参数的,但在 Next JS 的情况下具有多个段。我不常使用 API 路由,但我经常在 Next 中使用文件系统路由。尝试与它们玩耍,看看会发生什么。 - KeitelDOG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接