【发布时间】:2018-08-01 22:06:27
【问题描述】:
我正在为 API 调用使用代理 api 设置,如本网站所述。https://juristr.com/blog/2016/11/configure-proxy-api-angular-cli/ 当我使用 npm start 时,这可以正常工作。但是当我构建它并将其托管在 IIS 上时。它不工作。我相信 proxy.config.json 没有添加到 dist 文件夹中。
【问题讨论】:
我正在为 API 调用使用代理 api 设置,如本网站所述。https://juristr.com/blog/2016/11/configure-proxy-api-angular-cli/ 当我使用 npm start 时,这可以正常工作。但是当我构建它并将其托管在 IIS 上时。它不工作。我相信 proxy.config.json 没有添加到 dist 文件夹中。
【问题讨论】:
我和你面临同样的问题。我的 proxy.config.json 在我的开发环境中工作,但在 PROD 环境中无法工作,即使我使用 build --prod 构建
找到方法后,我找到了一个用中间件制作代理后端的解决方案(在我的案例中我使用了 Nginx)。
如果你也使用过 Nginx,你可以通过将它配置到你的 nginx 配置中来做代理后端。
nginx.conf
location /api/ {
proxy_pass http://127.0.0.1:8087;
#all incoming http request with /api/ will be forwarded to http://127.0.0.1:8087/api/
}
【讨论】:
http://127.0.0.1:8087
当开发服务器处于活动状态时,代理正在工作。 ng build 不启动开发服务器,此命令仅构建项目。因此,您不能在组装项目中使用代理。您可以使用 ng serve --proxy-config proxy.config.json --prod 之类的东西在带有代理的 prod 环境中进行测试
如果您需要在生产中使用另一个基本 url,您可以使用HttpInterceptor。只需创建这样的服务
@Injectable()
export class InterceptorsService implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const proxyReq = req.clone({ url: `${ BASE_PATH }${ request.url }` });
return next.handle(proxyReq);
}
}
并将其添加到模块中的提供程序
...
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: InterceptorsService, multi: true }, ...
]
...
【讨论】:
http://your-domain 更改为 http://Asfgk005i:8000,则将我的示例中的 BASE_PATH 更改为 http://Asfgk005i:8000。另一种方法是在您的服务中使用完整的 url。您可以保存常量export const BASE_URL = 'http://Asfgk005i:8000' 并将其添加到所有网址之前:http.get(BASE_URL + "/api/name?courseId="embeded"")
此配置仅用于您的开发设置,不应在生产中使用。您需要包含其他解决方案才能让您的生产环境运行。
【讨论】: