我想知道是否有一种方法可以让我在API路由(pages/api/myapi)中获得当前请求的完整URL,我看到的唯一返回的响应接近我所需要的是req.headers.referer,但我不确定这个值是否总是在头中。还有req.headers.host和req.headers.origin,但缺少协议。最终目标是在我的API处理函数中获取完整的URL。例如,“https://example.org/api/test“
req.headers.referer
req.headers.host
req.headers.origin
pxq42qpu1#
我看有两个选择。
如果协议已知(例如http或https),则合并
http
https
localhost:3000
req.url
/api/test
如果协议是未知的,那么我们必须深入挖掘以获得完整的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的一个示例是:
__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
1条答案
按热度按时间pxq42qpu1#
我看有两个选择。
选项1
如果协议已知(例如
http
或https
),则合并req.headers.host
-返回带有 * 端口号 * 的 * 主机名 *,例如localhost:3000
req.url
-返回请求的路径,例如/api/test
选项2
如果协议是未知的,那么我们必须深入挖掘以获得完整的URL。
several approaches of accessing Symbol's properties in an object。访问
__NEXT_INIT_URL
的一个示例是: