概要
ローカルで開発してデータだけApiサーバから取得したいとき、
server/
配下をどうにかすると便利な話。
DS
のRESTAdapter
にHostを設定しても良いのだが、
開発だけ向き先を別ドメインに変えたい時などにしたい場合はhttp-proxy
を使用する。
http-proxy
作成
proxyファイルを作成
ember g http-proxy <Local Path> <Remote URL>
doc
作成の際にserver/index.js
の上書きを聞かれるので問題ない場合はy
、
すでに記述がある場合は上書きしないように気をつける。
上書きをしない場合はserver/index.js
で”proxies”が読み込まれる用にする。
1 2 3 4 5 6 7 8 9 10
| module.exports = function(app) { var globSync = require('glob').sync; var proxies = globSync('./proxies/**/*.js', { cwd: __dirname }).map(require);
var morgan = require('morgan'); app.use(morgan('dev'));
proxies.forEach(function(route) { route(app); }); };
|
api配下の全てを指定するとき
例えばhttp://your-domain/
のapi/*
を利用したい場合などは
proxyファイル作成
ember g http-proxy api /api
上記のコマンドでapiのproxyファイルが作成される
server/proxies/api.js
ファイル修正
作成したserver/proxies/api.js
を修正
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| var proxyPath = '/api';
module.exports = function(app) { var serverUrl = 'http://hogeproxy:80';
options = { target: serverUrl, changeOrigin: false }
var proxy = require('http-proxy').createProxyServer(options);
proxy.on('error', function(err, req) { console.error(err, req); });
app.use(proxyPath, function(req, res, next){ req.url = serverUrl + proxyPath + req.url; proxy.web(req, res); }); };
|
それでもmockを利用したい場合などは設定値にする
server/index.js
を変更し、起動時environment
に値を指定する
ember sever 起動時 ember server --environment=offline
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| module.exports = function(app, options) { var globSync = require('glob').sync; var mocks, proxies;
if (options.environment === 'offline') { mocks = globSync('./mocks/**/*.js', { cwd: __dirname }).map(require); } else { proxies = globSync('./proxies/**/*.js', { cwd: __dirname }).map(require); }
var morgan = require('morgan'); app.use(morgan('dev'));
if (mocks) { mocks.forEach(function(route) { route(app); }); }
if (proxies) { proxies.forEach(function(route) { route(app); }); } };
|
参考
※注 proxyファイルの書き方が、何か違うかもしれない。。
追記
上記の用に設定しなくてもserver/index.js
でmockを読み込まない用にして、
サーバ起動さの際にproxyを指定してあげれば良い。ember sever --proxy 'http://your-domain/'
参考
いちいちServerに設定するのが面倒な場合は~/.ember-cli
に記述もできる
1 2 3 4 5
| { "liveReload" : true, "environment" : "server", "proxy" : "http://your-domain" }
|
doc