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

Tox*_*nyc 4 javascript reactjs next.js

我想知道是否有办法获取 API 路由 (pages/api/myapi) 内当前请求的完整 URL,我看到的唯一返回的响应与我需要的接近req.headers.referer,但我不确定如果这个值总是在标题中。其类型是string | undefined.

还有req.headers.hostandreq.headers.origin但缺少协议。

最终目标是获取 API 处理函数中的完整 URL。即“https://example.org/api/test”

Tan*_*kom 5

我在这里看到两个选择。

选项1

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

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

选项2

如果协议未知,那么我们必须深入挖掘才能获得完整的 URL。该req对象在键中公开Symbol(NextRequestMeta)以下值

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

  }
}
Run Code Online (Sandbox Code Playgroud)

多种方法可以访问对象中的 Symbol 属性。访问的一个示例__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
Run Code Online (Sandbox Code Playgroud)