背景
有的时候在本地开发,大部分JSON数据基本上可以先伪造,但是有一部分URL请求需要用到线上数据,这个时候就可以利用node.js自己去做一个代理,将需要线上数据的URL请求捕获并转发到线上,下面就直接上代码
PS:如果需要更强大的反向代理可以尝试nginx,怎么配置可以参考:Nginx内网服务器建站
核心代码
app.js
var path = require('path');var express = require('express');var app = express();app.use(express.static(path.join(__dirname, 'public')));//这里我是把静态资源都放这里了app.get("/api/*", require("./proxy").proxy);var server = app.listen(80, function () { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port);});
proxy.js
var http = require("http");var querystring = require("querystring");exports.proxy = function(req, res) { // 获取 /api/ 之后的的 URL 路径 var path = req.path.replace(/^\/?api/, ""); //console.dir(path); // 获取请求参数 var contents = querystring.stringify(req.query); //console.dir(contents); var options = { // TODO 配置访问参数 host: 'api.xxx.com', path: '/api' + path, method: 'GET', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': contents.length } }; // 作为 http 客户端向服务器端发送请求 var request = http.request(options, function(response) { if (response.statusCode != 200) { // TODO 请求失败,返回错误 res.status(response.statusCode).end(); return; } // TODO 把 response 得到的数据通过 res 发送给浏览器 //response.setEncoding('UTF-8'); var pageData = ""; response.on('data', function(chunk) { pageData += chunk; }); response.on('end', function(){ var content = pageData; res.end(content); }); }); // 向服务器发送请求 request.write(contents); //console.dir(request); request.end();};