elw*_*wyn 73 angular-cli angular
使用angular-cli
ng serve
本地开发服务器,它将提供项目目录中的所有静态文件.
如何将我的AJAX调用代理到其他服务器?
ima*_*era 150
据我所知,Angular 2.0版本不建议使用.ember-cli文件设置代理.官方方式如下
编辑"start"
你的package.json
下面看
"start": "ng serve --proxy-config proxy.conf.json",
创建一个proxy.conf.json
在项目根目录中调用的新文件,并在其中定义代理,如下所示
{
"/angular": {
"target": {
"host": "github.com",
"protocol": "https:",
"port": 443
},
"secure": false,
"changeOrigin": true,
"logLevel": "info"
}
}
Run Code Online (Sandbox Code Playgroud)重要的是你用npm start
而不是ng serve
从这里阅读更多内容:代理设置Angular 2 cli
现在可以使用更好的文档,您可以使用基于JSON和JavaScript的配置: angular-cli文档代理
示例https代理配置
{
"/api": {
"target": "http://api.yourdomai.com",
"secure": false
}
}
Run Code Online (Sandbox Code Playgroud)
gle*_*ron 31
目前,从 Angular 12 开始,官方的做法是这样的:
proxy.conf.json
在/src
项目文件夹中创建一个名为的文件,并使用它来定义代理:
{
"/api": {
"target": "http://api.yourdomai.com",
"secure": false
}
}
Run Code Online (Sandbox Code Playgroud)
更改angular.json
文件以在运行时包含代理:
...
"architect": {
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "your-application-name:build",
"proxyConfig": "src/proxy.conf.json"
},
...
Run Code Online (Sandbox Code Playgroud)
请注意,您可以根据配置进行设置,因此如果您只想在开发环境中配置代理(通常在生产中您将使用 HTTP 服务器来管理代理),您可以像这样配置它:
...
"architect": {
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"production": {
"browserTarget": "your-application-name:build",
},
"development": {
"browserTarget": "your-application-name:build",
"proxyConfig": "src/proxy.conf.json"
},
...
Run Code Online (Sandbox Code Playgroud)
现在,当您运行时,ng serve
它将正确代理请求。
完整的文档在这里:Building and services Angular-proxying to a backend server
Eug*_*nic 26
我会在这个例子中解释你需要知道的一切:
{
"/folder/sub-folder/*": {
"target": "http://localhost:1100",
"secure": false,
"pathRewrite": {
"^/folder/sub-folder/": "/new-folder/"
},
"changeOrigin": true,
"logLevel": "debug"
}
}
Run Code Online (Sandbox Code Playgroud)
/ folder/sub-folder/* path说:当我在angular 2应用程序中看到这条路径时(路径可以存储在任何地方)我想用它做点什么.*字符表示将包含子文件夹后面的所有内容.例如,如果/ folder/sub-folder /中有多个字体,*将会获取所有字体
"target":" http:// localhost:1100 "为上面的路径使目标 url为主机/源,因此在后台我们将有http:// localhost:1100/folder/sub-folder /
"pathRewrite ":{"^/folder/sub-folder /":"/ new-folder /"},现在假设您要在本地测试您的应用程序,http:// localhost:1100/folder/sub-文件夹/可能包含在无效路径中:/ folder/sub-folder /.您希望将此路径更改为http:// localhost:1100/new-folder /的正确路径,因此pathRewrite将变得非常有用.它将排除应用程序中的路径(左侧)并包括新写入的路径(右侧)
"secure"属性表示我们使用的是http或https.如果在目标属性中使用https,则将secure属性设置为true,否则将其设置为false
"changeOrigin":仅当主机目标不是当前环境时才需要选项,例如:localhost.如果要将主机更改为www.something.com,这将是代理中的目标,则将changeOrigin属性设置为"true":
"logLevel"属性指定开发人员想要在他的终端上输出代理,因此他将使用图像上显示的"debug"值
通常,代理有助于在本地开发应用程序.您为生产目的设置文件路径,如果您在项目中本地拥有所有这些文件,则可以使用代理访问它们,而无需在应用程序中动态更改路径.
如果它有效,你应该在你的cmd /终端中看到类似的东西
Ton*_*alo 25
这对我来说很接近.还必须添加:
"changeOrigin": true,
"pathRewrite": {"^/proxy" : ""}
Run Code Online (Sandbox Code Playgroud)
完整proxy.conf.json
显示如下:
{
"/proxy/*": {
"target": "https://url.com",
"secure": false,
"changeOrigin": true,
"logLevel": "debug",
"pathRewrite": {
"^/proxy": ""
}
}
}
Run Code Online (Sandbox Code Playgroud)
elw*_*wyn 10
编辑:这在当前的ANGULAR-CLI中没有更长的工作时间
请参阅@imal hasarang perera的答案以获取最新解决方案
服务器angular-cli
来自ember-cli
项目.要配置服务器,请.ember-cli
在项目根目录中创建一个文件.在那里添加您的JSON配置:
{
"proxy": "https://api.example.com"
}
Run Code Online (Sandbox Code Playgroud)
重新启动服务器,它将代理所有请求.
例如,我正在我的代码中发出相对请求/v1/foo/123
,这些请求正在被提取https://api.example.com/v1/foo/123
.
您还可以在启动服务器时使用标志:
ng serve --proxy https://api.example.com
angular-cli版本的当前值:1.0.0-beta.0
小智 7
当您需要更多灵活性时,这是另一种代理方式:
您可以使用 'router' 选项和一些 javascript 代码来动态重写目标 URL。为此,您需要在“开始”脚本参数列表中指定一个 javascript 文件而不是 json 文件作为 --proxy-conf 参数:
"start": "ng serve --proxy-config proxy.conf.js --base-href /"
Run Code Online (Sandbox Code Playgroud)
如上所示,如果您将 <base href="..."> 设置为 index.html 中的路径,则还需要将 --base-href 参数设置为 /。此设置将覆盖该设置,并且有必要确保正确构造 http 请求中的 URL。
然后你需要在你的 proxy.conf.js(不是 json!)中包含以下或类似的内容:
const PROXY_CONFIG = {
"/api/*": {
target: https://www.mydefaulturl.com,
router: function (req) {
var target = 'https://www.myrewrittenurl.com'; // or some custom code
return target;
},
changeOrigin: true,
secure: false
}
};
module.exports = PROXY_CONFIG;
Run Code Online (Sandbox Code Playgroud)
请注意,可以通过两种方式使用路由器选项。一种是当您分配一个包含键值对的对象时,其中键是请求匹配的主机/路径,值是重写的目标 URL。另一种方法是当您使用一些自定义代码分配函数时,这就是我在此处的示例中演示的内容。在后一种情况下,我发现目标选项仍然需要设置为某些东西才能使路由器选项工作。如果您为路由器选项分配自定义功能,则不会使用目标选项,因此可以将其设置为 true。否则,它需要是默认的目标 URL。
Webpack 使用 http-proxy-middleware,所以你会在那里找到有用的文档:https : //github.com/chimurai/http-proxy-middleware/blob/master/README.md#http-proxy-middleware-options
以下示例将从 cookie 中获取开发人员名称,以确定使用自定义函数作为路由器的目标 URL:
const PROXY_CONFIG = {
"/api/*": {
target: true,
router: function (req) {
var devName = '';
var rc = req.headers.cookie;
rc && rc.split(';').forEach(function( cookie ) {
var parts = cookie.split('=');
if(parts.shift().trim() == 'dev') {
devName = decodeURI(parts.join('='));
}
});
var target = 'https://www.'+ (devName ? devName + '.' : '' ) +'mycompany.com';
//console.log(target);
return target;
},
changeOrigin: true,
secure: false
}
};
module.exports = PROXY_CONFIG;
Run Code Online (Sandbox Code Playgroud)
(cookie 是为 localhost 和路径“/”设置的,并且使用浏览器插件设置了很长时间。如果 cookie 不存在,则 URL 将指向实时站点。)
小智 7
第 1 步:转到您的根文件夹创建proxy.conf.json
{
"/auth/*": {
"target": "http://localhost:8000",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
}
Run Code Online (Sandbox Code Playgroud)
第2步:转到package.json,在“start”下找到“scripts”
"start": "ng serve --proxy-config proxy.conf.json",
Run Code Online (Sandbox Code Playgroud)
第 3 步:现在在您的http中添加 /auth/
return this.http
.post('/auth/register/', { "username": 'simolee12', "email": 'xyz@gmail.com', "password": 'Anything@Anything' });
}
Run Code Online (Sandbox Code Playgroud)
第 4 步:终端中的最后一步运行 npm start
{
"/api": {
"target": "http://targetIP:targetPort",
"secure": false,
"pathRewrite": {"^/api" : targeturl/api},
"changeOrigin": true,
"logLevel": "debug"
}
}
Run Code Online (Sandbox Code Playgroud)
在 package.json 中,使
"start": "ng serve --proxy-config proxy.conf.json"
在代码中 let url = "/api/clnsIt/dev/78"; 该 url 将被转换为 http://targetIP:targetPort/api/clnsIt/dev/78。
您还可以通过填充pathRewrite来强制重写。这是详细信息的链接 cmd/NPM 控制台将记录类似“将路径从“/api/...”重写为“http://targeturl:targetPort/api/..”,而浏览器控制台将记录“http: //loclahost/api”
如果有人正在寻找同一目标或基于 TypeScript 的配置的多个上下文条目。
代理配置文件
const proxyConfig = [
{
context: ['/api/v1', '/api/v2],
target: 'https://example.com',
secure: true,
changeOrigin: true
},
{
context: ['**'], // Rest of other API call
target: 'http://somethingelse.com',
secure: false,
changeOrigin: true
}
];
module.exports = proxyConfig;
Run Code Online (Sandbox Code Playgroud)
ng serve --proxy-config=./proxy.conf.ts -o
小智 5
请务必注意,代理路径将附加到您配置为目标的任何内容。所以像这样的配置:
{
"/api": {
"target": "http://myhost.com/api,
...
}
}
Run Code Online (Sandbox Code Playgroud)
类似的请求http://localhost:4200/api
将导致调用http://myhost.com/api/api
. 我认为这里的目的是在开发和生产环境之间不要有两条不同的路径。您所需要做的就是使用/api
作为您的基本 URL。
因此,正确的方法是简单地使用 api 路径之前的部分,在本例中仅使用主机地址:
{
"/api": {
"target": "http://myhost.com",
...
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
143149 次 |
最近记录: |