【发布时间】:2021-09-21 02:48:02
【问题描述】:
我想获取用户时区和位置以根据位置和时区呈现服务器端页面,但我无法从请求中获取用户 IP 地址或获取本地主机 IP 地址 (127.0.0.1 )。那我该怎么办?
【问题讨论】:
标签: javascript node.js reactjs express next.js
我想获取用户时区和位置以根据位置和时区呈现服务器端页面,但我无法从请求中获取用户 IP 地址或获取本地主机 IP 地址 (127.0.0.1 )。那我该怎么办?
【问题讨论】:
标签: javascript node.js reactjs express next.js
您可以使用 NextRequest 对象作为本机 Request 接口的直接替代品,让您可以更好地控制如何处理请求。 参考:https://nextjs.org/docs/api-reference/next/server#nextrequest
NextRequest 是完全类型化的,可以从 next/server 导入。
import type { NextRequest } from 'next/server'
NextRequest 对象是原生 Request 接口的扩展,添加了以下方法和属性:
【讨论】:
能够使用 next.js 应用检测用户 IP 地址:
export async function getServerSideProps({ req }) {
const forwarded = req.headers["x-forwarded-for"]
const ip = forwarded ? forwarded.split(/, /)[0] : req.connection.remoteAddress
return {
props: {
ip,
},
}
}
【讨论】:
您也可以尝试使用页面的getInitialProps。
IndexPage.getInitialProps = async ({ req }) => {
const ip = req.headers["x-real-ip"] || req.connection.remoteAddress;
return { ip };
};
【讨论】:
您可以使用类似request-ip 的包。然后在您的 API 路由中:
import requestIp from 'request-ip'
export default async function myRoute(
req: NextApiRequest,
res: NextApiResponse
) {
const detectedIp = requestIp.getClientIp(req)
}
【讨论】:
x-forwarded-for 代理标头