reactjs 如何从nextjs中的API路由获取完整的url

rryofs0p  于 2022-11-22  发布在  React
关注(0)|答案(1)|浏览(171)

我想知道是否有一种方法可以让我在API路由(pages/api/myapi)中获得当前请求的完整URL,我看到的唯一返回的响应接近我所需要的是req.headers.referer,但我不确定这个值是否总是在头中。
还有req.headers.hostreq.headers.origin,但缺少协议。
最终目标是在我的API处理函数中获取完整的URL。例如,“https://example.org/api/test“

pxq42qpu

pxq42qpu1#

我看有两个选择。

选项1

如果协议已知(例如httphttps),则合并

  • req.headers.host-返回带有 * 端口号 * 的 * 主机名 *,例如localhost:3000
  • req.url-返回请求的路径,例如/api/test

选项2

如果协议是未知的,那么我们必须深入挖掘以获得完整的URL。

{
  ...
  [Symbol(NextRequestMeta)]: {
    __NEXT_INIT_URL: 'http://localhost:3000/api/test',
    _protocol: 'http',

  }
}

several approaches of accessing Symbol's properties in an object。访问__NEXT_INIT_URL的一个示例是:

const nextRequestMeta = req[Reflect.ownKeys(req).find(
    (s) => String(s) === "Symbol(NextRequestMeta)"
)];
console.log(nextRequestMeta.__NEXT_INIT_URL); // -> http://localhost:3000/api/test

相关问题