基于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