如何实现服务器转发请求第三方接口的数据,也是node服务器解决跨域的问题
通过localhost转发接口

https://m.maizuo.com/v4/api/film/Now-playing?__t=1523003169298&page=1&count=5

的数据,代码实例如下:
html

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width,initial-scale=1.0">
    <Meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
    <title>cross</title>
</head>
<body>
    
</body>
<script>
    $.ajax({
        url:'/v4/api/film/Now-playing?__t=1523003169298&page=1&count=5',type:'GET',success:function(res) {
           console.log('success');
        },error:function() {
            console.log('error');
        }
    })
</script>
</html>
// 跨域问题,当你无法操作后台是否可以跨域的时候
var http = require('http');
var https = require('https');
var server = http.createServer();
var fs = require('fs');
server.listen('8080');
var url = require('url');

server.on('request',(request,response)=>{
    var path = url.parse(request.url);
    if(path.pathname == '/') {
        fs.readFile('./html/coress.html',(err,info)=>{
            response.write(info);
            response.end();
        })
    } else if(path.pathname.startsWith('/v4')) { //服务器转发请求
     //创建请求
      var request =  https.request({
            hostname:'m.maizuo.com',port:'443',path:path.path,method:'GET'
        },(resp)=>{
            let results = '';
            //监听接受数据
            resp.on('data',(dataObj)=>{
                results += dataObj;
            })
         //监听关闭
            resp.on('end',()=>{
                response.write(results);
                response.end();
            })
        })
        // 发送请求
        request.end();
    }
})

启动服务之后,就可以通过:

http://localhost:8080/v4/api/film/Now-playing?__t=1523003169298&page=1&count=5

来访问数据。

二,下面来探讨一下node服务器如何拦截ajax请求,注意,页面引入jquery引入第三方是不存在跨域的问题,只有通过ajax调用第三方接口请求数据的时候,才会存在跨域。

我们将html定义如下

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <Meta name="viewport" content="width=device-width,initial-scale=1.0">
    <Meta http-equiv="X-UA-Compatible" content="ie=edge">
    <!-- 通过express的static插件读取静态文件-->
    <link rel="stylesheet" type="text/css" href="./static/style.css" />
    <script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
    <title>Document</title>
</head>
<body>
    <div>这是一个div </div>
    <div>这是一个div  </div>
    <div>这是一个div  </div>
    <div>这是一个div  </div>
    <div>这是一个div  </div>
    <div>这是一个div  </div>
    <div>这是一个div  </div>
    <div>这是一个div  </div>
    <div>这是一个div  </div>
    <div>这是一个div  </div>
    <div>这是一个div  </div>
    <input type="button" value="get按钮" class="btn1"/>
    <input type="button" value="post按钮" class="btn2"/>
     <!-- 通过express的static插件读取静态文件-->
    <script type="text/javascript" src="./static/test.js"></script>
 </body>
</html>

我们将css文件和js文件一致放到public文件夹下面
我们通过express提供的第三方插件static读取静态的资源文件

server.use('/static',express.static(__dirname+'/public'));

在页面上定义2个按钮

<input type="button" value="get按钮" class="btn1"/>
    <input type="button" value="post按钮" class="btn2"/>

利用jquery请求按钮点击事件触发

$('.btn1').on('click',function() {
    $.ajax({
        url:'/api/user/login?name=zs&password=lisi',method:'GET',success:function(data) {
           console.log('成功');
           console.log(data);
        },error:function() {
            console.log('失败');
        }
    })
})

$('.btn2').on('click',function() {
    $.ajax({
        url:'/api/user/login',method:'POST',data:{
            name:'sz',password:'r4tr4'
        },error:function() {
            console.log('失败');
        }
    })
})

在node主入口js文件里面进行拦截请求

server.get('/',(req,res)=>{
    fs.readFile('./html/node.html',info)=>{
        if(!err) {
            res.write(info);
            res.end();
        }
    })
})
//服务器拦截get请求
server.get('/api/user/login',res)=>{
    console.log(req.url);
    res.json({
        status:200,message:'登录成功',data:{'getData':'fdsafds','goods':'ddd','dsf':'343'}
    })
})


//服务器拦截post请求
server.post('/api/user/login',data:{'postdata':'fdsafd','dsf':'343'}
    })
})

点击get按钮,前端请求的数据如下:

点击post按钮,前端请求的数据如下:

node服务器转发请求以及node拦截ajax请求的更多相关文章

  1. 利用Node实现HTML5离线存储的方法

    这篇文章主要介绍了利用Node实现HTML5离线存储的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 关于h5中的fetch方法解读(小结)

    这篇文章主要介绍了关于h5中的fetch方法解读(小结),fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,有兴趣的可以了解一下

  3. ios – 使用带有NodeJs HTTPS的certificates.cer

    我为IOS推送通知生成了一个.cer文件,我希望将它与NodeJSHTTPS模块一起使用.我发现HTTPS模块的唯一例子是使用.pem和.sfx文件,而不是.cer:有解决方案吗解决方法.cer文件可以使用两种不同的格式进行编码:PEM和DER.如果您的文件使用PEM格式编码,您可以像使用任何其他.pem文件一样使用它(有关详细信息,请参见Node.jsdocumentation):如果您的文件使

  4. ios – 使用NSURLSession获取JSON数据

    我试图从谷歌距离api使用NSURLSession获取数据,但如下所示,当我打印响应和数据时,我得到的结果为NULL.可能是什么问题?

  5. ios – 错误域= com.alamofire.error.serialization.response代码= -1011“请求失败:禁止

    任何人都可以帮我解决以下错误–>在AFNetworking2.5中使用“删除”方法时出错解决方法我发现,如果我的手机时钟不同步……它不允许我更新…也许检查你的手机设置到正确的时间“自动区”,看看是否有效…

  6. iOS网页/原生应用Facebook登录弹出 – 失败?

    如果我重新启动app/web-app,用户将自动登录,并重定向到成功页面.我认为是导致问题的原因当您在Firefox/Chrome/Safari浏览器中运行网页时,Facebook登录对话框会弹出一个弹出窗口或另一个选项卡.我相信这是这个弹出页面的一个问题,以及当成功登录时Javascript如何与自身通信.window.close的东西没有返回的根页面…失败的解决方法由于应用程序挂在前面提到的URL上,我决定在shouldStartLoadWithRequest(…)中添加if语句以强制UIWebvie

  7. ios – Watchkit新会话不起作用

    我的手表扩展中有两个视图控制器.每当我打电话时我只得到第一个视图控制器的响应,并在第二个viewcontroller中得到错误WCSession在app和watch扩展中启动.任何建议?

  8. 使用Firebase iOS Swift将特定设备的通知推送到特定设备

    我非常感谢PushNotifications的帮助.我的应用聊天,用户可以直接向对方发送短信.但是如果没有PushNotifications,它就没有多大意义.它全部设置在Firebase上.如何将推送通知从特定设备发送到特定设备?

  9. ios – 保存从查询中获取的用户的属性(即不在currentUser上)

    我有兴趣根据currentUser执行的操作将属性保存到数据库中的用户.基于以下代码,我收到错误消息“除非已通过logIn或signUp验证用户,否则无法保存用户”我想知道是否有一个解决方法,我可以将属性保存到foundUser,而无需登录该用户.谢谢你的帮助!解决方法如果要更新当前不是登录用户的用户,则需要使用主密钥调用Parse.您可以从CloudCode执行此操作;并从您的iOS项目中调用它;

  10. 在iOS中使用NSJSONSerialization进行JSON解析

    解决方法首先在您的JSON响应字典中,在“RESPONSE”键下,您有一个数组而不是字典,该数组包含字典对象.所以要提取用户名和电子邮件ID,如下所示

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部