对于前端开发的童鞋,如果涉及到和后端协同开发,有可能会碰到跨域的问题,对于解决跨域的问题,目前有几种解决方式,例如可以通过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的跨域访问解决方案。