對于前端開發(fā)的童鞋,如果涉及到和后端協(xié)同開發(fā)抗悍,有可能會(huì)碰到跨域的問題驹饺,對于解決跨域的問題,目前有幾種解決方式檐春,例如可以通過jsonp訪問服務(wù)端逻淌,設(shè)置相應(yīng)頭access-control-allow-origin屬性等等,而今天主要討論的是基于nodejs的跨域解決方案疟暖。
基于nodejs的跨域解決方案優(yōu)點(diǎn)在于瀏覽器兼容性好卡儒,支持多種網(wǎng)絡(luò)請求方式,在正式介紹前俐巴,先了解一下request模塊骨望。
request模塊是專門負(fù)責(zé)網(wǎng)絡(luò)請求訪問的模塊,使用方式十分簡單:
var request=require("request");
request.get("http://www.baidu.com/",function(error,response,body){
? ?console.log(body);
});
note:運(yùn)行試?yán)靶蓝妫刃枰ㄟ^npm安裝request模塊;
以上試?yán)瓿闪艘粋€(gè)簡單的網(wǎng)絡(luò)請求擎鸠,request模塊功能不止于此,下面再看一個(gè)例子:
var request=require("request");
var options={
? ?url:"http://www.test.com/"缘圈,
? ?body:{"param1":"a"},
};
reuqest(options,function(error,response,body){
?......
});
上面的例子中劣光,通過request提交參數(shù)到服務(wù)器中袜蚕,使用起來也是十分的簡單,還有其他使用方法和說明绢涡,可參考https://github.com/request/request牲剃。
簡單介紹完request模塊之后,我們開始今天的主題雄可,在前端網(wǎng)站開發(fā)過程中凿傅,網(wǎng)絡(luò)請求指向nodejs提供的接口,nodejs服務(wù)端再發(fā)起請求指向跨域的服務(wù)器数苫,然后依次返回到前端頁面聪舒,這樣就完成了跨域的訪問,基本上就滿足了跨域訪問的問題了虐急,接下來我們來看一下完整的實(shí)現(xiàn):
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);
}
上面的例子實(shí)現(xiàn)了請求認(rèn)證和參數(shù)傳遞,能滿足絕大多數(shù)網(wǎng)絡(luò)請求戏仓,以上就是基于nodejs的跨域訪問解決方案疚宇。