NodeJsシンプルで使いやすいローカルエージェントサーバの構築
node-proxy-server
引用する
純粋なフロントエンド開発の場合、多くのビジネスシーンではローカルサーバを構築し、ページの閲覧を容易にする必要があります.いくつかのメリットを簡単に列挙します.ローカルエリアネットワーク内のマルチターミナルアクセス 外部ネットワークマッピング と連携インタフェースのドメイン間問題を解決する 私がよく使ういくつかのローカルサーバの構築方法は、例えば
npmのserve packageグローバルインストール、 が直接起動すると、ドメイン間ではサポートされません.
webpack-dev-serverは一般的にwepackベースのプロジェクトで使用され、一般的なH 5構築にはコストがかかる. はドメイン間でサポートされています.
node-proxy-serverリンクは通常のページ開発に適しており、構成が簡単で、nodeコマンドが起動します. はドメイン間でサポートされています.
Node-proxy-server原理
コンフィギュレーション
インタフェースアドレスのブロック、およびエージェントインタフェースのアドレスを構成します.
ミドルエージェントサーバ
主にnodejsのhttpとfsモジュールを利用して、中間サーバを作成し、ページ要求を受け入れ、中間サーバを通じて実際のインタフェースを要求し、データを返します.
要求をブロックして転送する
構成で設定されたブロックパスに従って、要求をブロックし、実際のアドレスに転送する.
一般リソースリクエスト
ブロック要求ではなく、直接通過します.
ソースコード
完全なコード、ご自身を歓迎します.
引用する
純粋なフロントエンド開発の場合、多くのビジネスシーンではローカルサーバを構築し、ページの閲覧を容易にする必要があります.いくつかのメリットを簡単に列挙します.
npmのserve package
serve ./
起動、便利で使いやすい.webpack-dev-server
node-proxy-serverリンク
Node-proxy-server原理
コンフィギュレーション
インタフェースアドレスのブロック、およびエージェントインタフェースのアドレスを構成します.
let conifg = {
'/xxxx1': {
//
target: 'http://xxxxxxxx.com', //
port: 80, // , 80, 8080
},
'/xxxx2': {
target: 'http://xxxxxxxx.com',
port: 80,
}
// ...other path
};
ミドルエージェントサーバ
主にnodejsのhttpとfsモジュールを利用して、中間サーバを作成し、ページ要求を受け入れ、中間サーバを通じて実際のインタフェースを要求し、データを返します.
let http = require('http');
let fs = require('fs');
// http
let app = http.createServer(function (request, response) {
});
要求をブロックして転送する
構成で設定されたブロックパスに従って、要求をブロックし、実際のアドレスに転送する.
//
function hasProxy(url, request, response) {
for (const key in conifg) {
//
const {
target, port } = conifg[key];
let info = target.split('//');
let opts = {
//
protocol: info[0],
host: info[1],
port: port || 80,
method: request.method,
path: url,
json: true,
headers: {
}
}
proxy(opts, request, response);
return true;
}
return false;
}
//
function proxy(opts, request, response) {
//
var proxyRequest = http.request(opts, function (proxyResponse) {
// , response
proxyResponse.on('data', function (chunk) {
response.write(chunk, 'binary');
});
// , response
proxyResponse.on('end', function () {
response.end();
});
response.writeHead(proxyResponse.statusCode, proxyResponse.headers);
});
// ,
request.on('data', function (chunk) {
proxyRequest.write(chunk, 'binary');
});
// ,
request.on('end', function () {
proxyRequest.end();
});
}
一般リソースリクエスト
ブロック要求ではなく、直接通過します.
//
fs.readFile(__dirname + url, function (err, data) {
if (err) {
console.log(' ', err);
} else {
response.end(data);
}
});
ソースコード
完全なコード、ご自身を歓迎します.