node跨域

jsonp实现跨域

jsonp是后端实现的,前端需要配合

  • jsonp 不是ajax请求,是利用浏览器端请求了一个js不跨域的特性
  • 代码:
    • 前端代码:
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Document</title>
      </head>
      <body>
          <script>
              function getData (data){
                  //data 是后端传过来的数据
                  console.log(data)
              }
          </script>
          <script src="http://localhost:8082/api/data?cd=getData"></script>
      </body>
      </html>
      
    • 后端代码(nodejs):
      const http = require('http');
      const url = require('url');
      
      const server = http.createServer( ( request ,response ) => {
          let urlstr = request.url;
          let urlobj = url.parse(urlstr,true);
          console.log(urlobj)
          switch (urlobj.pathname) {
              case '/api/data':
                  // response.write('Hello');
                  // response.write('console.log("213213")');
                  //response.write(`getData("holle")`);
                  //后端直接掉用前端定义好的方法,并传入要给前端的数据
                  response.write(`${urlobj.query.cd}("holle")`);
                  break;
          
              default:
                  response.write('page not found.')
                  break;
          }
          response.end();
      });
      
      server.listen(8082, () => {
          console.log('localhost:8082')
      });
      
CORS
  • jsonp是后端实现的
  • 代码:
    • 后端代码:
      const http = require('http');
      const url = require('url');
      
      const server = http.createServer( ( request ,response ) => {
          let urlstr = request.url;
          let urlobj = url.parse(urlstr,true);
          console.log(urlobj)
          switch (urlobj.pathname) {
              case '/api/data':
                  response.writeHead(200,{
                      'content-type':'application/json',
                      'Access-Control-Allow-Origin':'*' // 后端响应头部加'Access-Control-Allow-Origin':'*' 就行了
                  });
                  response.write(`{"ret":true,"data":"hello"}`)
                  break;
          
              default:
                  response.write('page not found.')
                  break;
          }
          response.end();
      });
      
      server.listen(8082, () => {
          console.log('localhost:8082')
      });
      
跨域(通过代理)
  • 使用中间件(“http-proxy-middleware”);
  • 代码
    const http = require('http');
    const url = require('url');
    const {createProxyMiddleware} = require('http-proxy-middleware')
    
    const server = http.createServer( ( request, response ) => {
    const urlStr = request.url;
    if ( /\/api/.test(urlStr) ) {
        console.log(urlStr)
        const proxy = createProxyMiddleware('/api',{
            target: 'https://photo.home.163.com', 
            changeOrigin: true,
            // pathRewrite: {
            //     '^/api': ''
            //   },
        });
        //https://photo.home.163.com/api/designer/pc/home/index/word
        proxy(request,response )
    }
    else if ( /\/ajax/.test(urlStr) ) {
        console.log('ajax',urlStr)
        const proxy1 = createProxyMiddleware('/ajax',{
            target: 'https://weibo.com', 
            changeOrigin: true,
            pathRewrite: {
                '^/ajax': ''
              },
        });
        //https://weibo.com/ajax/statuses/mymblog?uid=1655444627&page=1&feature=0
        proxy1(request,response )
    }
    else{
        console.log('err')
    }
    });
    
    server.listen( 8082, () => {
        console.log("localhost:8082")
    })
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值