angular-cli server - how to proxy API requests to another server?
UPDATE 2022
The officially recommended approach is now the one documented here
UPDATE 2017
Better documentation is now available and you can use both JSON and JavaScript based configurations: angular-cli documentation proxy
sample https proxy configuration
{
"/angular": {
"target": {
"host": "github.com",
"protocol": "https:",
"port": 443
},
"secure": false,
"changeOrigin": true,
"logLevel": "info"
}
}
To my knowledge with Angular 2.0 release setting up proxies using .ember-cli file is not recommended. official way is like below
edit
"start"
of yourpackage.json
to look below"start": "ng serve --proxy-config proxy.conf.json",
create a new file called
proxy.conf.json
in the root of the project and inside of that define your proxies like below{ "/api": { "target": "http://api.yourdomai.com", "secure": false } }
Important thing is that you use
npm start
instead ofng serve
Read more from here : Proxy Setup Angular 2 cli
I'll explain what you need to know on the example below:
{
"/folder/sub-folder/*": {
"target": "http://localhost:1100",
"secure": false,
"pathRewrite": {
"^/folder/sub-folder/": "/new-folder/"
},
"changeOrigin": true,
"logLevel": "debug"
}
}
/folder/sub-folder/*: path says: When I see this path inside my angular app (the path can be stored anywhere) I want to do something with it. The * character indicates that everything that follows the sub-folder will be included. For instance, if you have multiple fonts inside /folder/sub-folder/, the * will pick up all of them
"target": "http://localhost:1100" for the path above make target URL the host/source, therefore in the background we will have http://localhost:1100/folder/sub-folder/
"pathRewrite": { "^/folder/sub-folder/": "/new-folder/" }, Now let's say that you want to test your app locally, the url http://localhost:1100/folder/sub-folder/ may contain an invalid path: /folder/sub-folder/. You want to change that path to a correct one which is http://localhost:1100/new-folder/, therefore the pathRewrite will become useful. It will exclude the path in the app(left side) and include the newly written one (right side)
"secure": represents wether we are using http or https. If https is used in the target attribute then set secure attribute to true otherwise set it to false
"changeOrigin": option is only necessary if your host target is not the current environment, for example: localhost. If you want to change the host to www.something.com which would be the target in the proxy then set the changeOrigin attribute to "true":
"logLevel": attribute specifies wether the developer wants to display proxying on his terminal/cmd, hence he would use the "debug" value as shown in the image
In general, the proxy helps in developing the application locally. You set your file paths for production purpose and if you have all these files locally inside your project you may just use proxy to access them without changing the path dynamically in your app.
If it works, you should see something like this in your cmd/terminal.
This was close to working for me. Also had to add:
"changeOrigin": true,
"pathRewrite": {"^/proxy" : ""}
Full proxy.conf.json
shown below:
{
"/proxy/*": {
"target": "https://url.com",
"secure": false,
"changeOrigin": true,
"logLevel": "debug",
"pathRewrite": {
"^/proxy": ""
}
}
}