如何在 NextJs 项目中获取页面 URL 或主机名?
IT技术
reactjs
next.js
hostname
domain-name
base-url
2021-05-20 13:00:53
4个回答
如果您想要服务器端 getInitialProps 中的主机名,您仍然可以从 req 中获取它
Home.getInitialProps = async(context) => {
const { req, query, res, asPath, pathname } = context;
if (req) {
let host = req.headers.host // will give you localhost:3000
}
}
您访问的地方window
确保您添加了一个检查,以便代码仅在浏览器上执行,而在 SSG 期间不执行”
if (typeof window !== 'undefined') {
const hostname = window.location.hostname;
}
更新:如果您已指定basePath
在next.config.js
:
module.exports = {
basePath: 'https://www.example.com/docs',
}
然后使用useRouter
,您可以访问基本路径:
import { useRouter } from 'next/router'
function Component() {
const router = useRouter();
console.log({ basePath: router.basePath});
// { basePath: 'https://www.example.com/docs' }
...
}
但是如果你有一个相对的基本路径,那么你可以使用第一种方法
使用typeof window !== 'undefined'
是安全的方式。if (window) {}
会让你遇到问题。
const hostname = typeof window !== 'undefined' && window.location.hostname ? window.location.hostname : '';
const origin = typeof window !== 'undefined' && window.location.origin ? window.location.origin : '';
使用上面的代码将为您提供前端/外部主机名/客户端使用的来源:example.com
, 等www.example.com
,www.example.com:80
而不是这些localhost
东西。useRouter()
将返回服务器端主机名/来源 ( localhost
, localhost:3000
)
考虑这个包> next-absolute-url
import absoluteUrl from 'next-absolute-url'
const { origin } = absoluteUrl(req)
const apiURL = `${origin}/api/job.js`
如果您现在部署了 Next.js 应用程序,则 apiURL 将类似于https://your-app.now.sh/api/job.js
.
但是,如果您在本地运行应用程序,则 apiURL 将http://localhost:8000/api/job.js
改为。
其它你可能感兴趣的问题