基于nodejs的跨域代理

作者: 萌蘑菇 | 来源:发表于2016-11-16 20:13 被阅读271次

    对于前端开发的童鞋,如果涉及到和后端协同开发,有可能会碰到跨域的问题,对于解决跨域的问题,目前有几种解决方式,例如可以通过jsonp访问服务端,设置相应头access-control-allow-origin属性等等,而今天主要讨论的是基于nodejs的跨域解决方案。


    基于nodejs的跨域解决方案优点在于浏览器兼容性好,支持多种网络请求方式,在正式介绍前,先了解一下request模块。

    request模块是专门负责网络请求访问的模块,使用方式十分简单:

    var request=require("request");

    request.get("http://www.baidu.com/",function(error,response,body){

       console.log(body);

    });

    note:运行试例前,先需要通过npm安装request模块;

    以上试例完成了一个简单的网络请求,request模块功能不止于此,下面再看一个例子:

    var request=require("request");

    var options={

       url:"http://www.test.com/",

       body:{"param1":"a"},

    };

    reuqest(options,function(error,response,body){

     ......

    });

    上面的例子中,通过request提交参数到服务器中,使用起来也是十分的简单,还有其他使用方法和说明,可参考https://github.com/request/request。

    简单介绍完request模块之后,我们开始今天的主题,在前端网站开发过程中,网络请求指向nodejs提供的接口,nodejs服务端再发起请求指向跨域的服务器,然后依次返回到前端页面,这样就完成了跨域的访问,基本上就满足了跨域访问的问题了,接下来我们来看一下完整的实现:

    proxy.js


    var options={

      url:"http://www.test.com/",

      headers:{

        "Authorization":"auth"

      },

      body:{"param1":"a","param2":"b"},

      json:true

    };

    function handleHttpRequest(req,res){

      reuqest(options,function(error,response,body){

         if(!error&&response.statusCode==200){

            console.log("body");

            res.write(body);

            res.end();

      }else{

           res.write("error:"+error);

      }

    });}

    exports.handleHttpRequest=handleHttpRequest;

    server.js


    var http=require("http");

    var proxy=require("./proxy");

    function runServer(requestConfig){

       http.createServer(function(request,response){

         proxy.sendHttpRequest(request,response);

       }).listen(8080);

    }

    上面的例子实现了请求认证和参数传递,能满足绝大多数网络请求,以上就是基于nodejs的跨域访问解决方案。

    相关文章

      网友评论

        本文标题:基于nodejs的跨域代理

        本文链接:https://www.haomeiwen.com/subject/meyqettx.html