NodeJs——实现跨域方法总结

碰到了nodejs跨域问题,真是摸索了一下午,写一个博客记录一下~
NodeJs——实现跨域方法总结_第1张图片
【第一种】
利用ajax请求,使用jsonp来解决跨域问题。
JSONP实现跨域请求的原理简单的说,就是动态创建script标签,然后利用script的src 不受同源策略约束来跨域获取数据。
原生js封装jsonp

 // 封装jsonp函数
        function jsonp(options) {
            // 动态设置script标签
            var script = document.createElement('script');
            // 通过地址传值
            script.src =options.url;
            // 添加到body中
            document.body.appendChild(script);
            //  当script标签加载完成之后,删除这个script标签
            script.onload = function () {
                document.body.removeChild(this);
            }
       }

//调用
 jsonp({
         url:'http://localhost:3001/better?callback=fn',
  })

使用jquery来发送jsonp请求
注意:jsonp默认是get请求,不能使用post请求

 $.ajax({
       async : true,
       url : "http://localhost:3001/test?callback=fn",
       type : "GET",
       dataType : "jsonp", // 返回的数据类型,设置为JSONP方式
       jsonp: 'callback', //指定一个查询参数名称来覆盖默认的 jsonp 回调参数名 callback
       jsonpCallback: 'handleResponse', //设置回调函数名
       data : {
             q : "javascript", 
             count : 1
          }, 
       success: function(response, status, xhr){
      	 console.log('状态为:' + status + ',状态是:' + xhr.statusText);
                   console.log(response);
                }
            });
//后台处理
app.get('/test',(req,res)=>{
    const fnname = req.query.callback;
    const result = fnname+"({name:'张三'})";
    res.send(result);
})

【第二种】
在服务器端处理,使用cors包来处理,这个处理方式比较简单,直接引入使用即可。
注意如果写的是前后端分离模式,cors的使用一定要放在路由之前。

const cors = require('cors');
//将cors挂载
app.use(cors())

处理cors的响应头

app.all("/*", function(req, res, next) {
    // 跨域处理
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", ' 3.2.1');
    res.header("Content-Type", "application/json;charset=utf-8");
    next(); // 执行下一个路由
})

这里有一点需要注意的是,服务器之间相互访问,我一直以为是两个服务器都要引入cors库,这个问题我摸索好久,原来只需要一个服务器引入cors库,另外一个服务器添加res.header响应头来响应。这样两个服务器彼此之间都可以相互访问。

你可能感兴趣的:(javascript,node.js,jquery)