node端代理浏览器路由 解决浏览器跨域问题

var _ = require('lodash');
var request = require("request");

/*
    @LM 2017-02-16
    node端代理浏览器路由 解决浏览器跨域问题
    demo:
    router.post('/proxy_http',proxy_routes);

    condition = {
        url:'',//接口地址 (必填)
        method:''//接口方式 (看接口需求)
        host:'',//
        form:{} post请求参数
    }

*/

exports.proxy_routes = function(req, res, next) {

    /*处理get或者post请求的req参数*/
    var condition = _.assign(req.body || {}, req.query || {});
    if(!condition.url){
        return next({status:101,message:'not defind url'})
    }

    if(condition.host){
        req.headers.host = condition.host;
    }

    var opts = {
        url: condition.url,
        method: condition.method||'GET',
        // headers: req.headers,
        form:condition.form||{}
    };

    var ts = Date.now();
    console.log('proxy_routes', opts, ts, "请求开始--");

    request(opts,function(err, response, body) {
        if(err){
            console.log('proxy_routes', opts, ts, "请求异常--err:" + err, (Date.now() - ts) + 'ms');
            return next(err);
        }
        
        console.log('proxy_routes', opts, ts, "请求正常--response.statusCode:" + response.statusCode, (Date.now() - ts) + 'ms');
        try{
            res.json(JSON.parse(body));
        }catch(e){
            res.json(body);
        }
    });
    
};

 

posted @ 2017-02-20 19:55  dtdxrk  阅读(433)  评论(0编辑  收藏  举报