我正在尝试将所有对/v1/*的请求修改为https://api.treedis.com/v1/ *。现在,它使用fetch-intercept与以下代码运行得很好:
fetchIntercept.register({
request(url, _config) {
const config = _config;
const myHeaders = new Headers();
if (!config.headers || !config.headers["Content-Type"]) {
myHeaders.append("Accept", "application/json");
myHeaders.append("Content-Type", "application/json");
}
let finalUrl = null;
if (url.indexOf("http") === -1) {
const domain = process.env.REACT_APP_DOMAIN || "http://localhost:5030";
finalUrl = `${domain}/${url}`;
} else {
finalUrl = url;
}
config.headers = myHeaders;
return [finalUrl, config];
},
})
process.env.REACT_APP_DOMAIN
设置为api.treedis.com。
此文件将导入到_app. js中
import App from "next/app";
import Head from "next/head";
import "../_helpers/auth-header";
class MyApp extends App {
render = () => {
const { Component, pageProps } = this.props;
return (
<>
<Head />
<Component {...pageProps} />
</>
);
};
}
export default MyApp;
现在,当我转到https://my.bc2e.com/tour/appartement-de-4-pieces-paris-5eme(我的NextJS应用程序)时,它试图转到v1/public/getTour。在我的浏览器上,它工作得很好,但在我的客户端上,它显示以下内容:
所以拦截的行动对他没用。当他清理缓存时,它工作,拦截器开始工作,但在几次刷新后它停止工作。
所以这是相当随机的。有时候拦截器会工作,并添加process.env.REACT_APP_DOMAIN
,有时候不会。我不知道为什么。
有什么想法吗?
这个NextJS应用程序托管在CloudFront上,Lambda@Edge进行路由。
2条答案
按热度按时间tvz2xvvm1#
为了解决这个问题,我用axios代替了fetch。我知道这不是一个真实的的解决方案,但它解决了这个问题。我不知道到底是什么造成的。
qybjjes12#
默认情况下,环境变量仅在
Node.js
环境中可用,这意味着它们不会暴露给浏览器。为了向浏览器公开一个变量,你必须在变量前面加上
NEXT_PUBLIC_.
例如:NEXT_PUBLIC_ANALYTICS_ID=your_public_analytics_id
是
next
之类的东西