• 前端培训丁鹿学堂:node使用http模块进行请求转发


    服务器之间请求是没有跨域限制的,我们可以利用node作为中间层,去请求别的服务器的接口,获取数据响应给自己定义的接口,实现转发。
    目的:1 解决跨域问题,2 如果多个接口在不同的服务器上处理跨域比较麻烦,node作为中间层容易维护。
    核心代码:利用http模块的get方法去请求数据
    前端请求:

     fetch('http://localhost:3000/api/getValue').then(response => {
                    return  response.json()
                }).then(res=>{
                    console.log(res)
                })
    
    • 1
    • 2
    • 3
    • 4
    • 5

    node代理转发豆瓣的请求给前端,如果请求是https的,要引入https的模块

    let https = require('https')
    
    • 1

    封装豆瓣请求

    function httpGet(callback){
        https.get('https://m.douban.com/j/puppy/frodo_landing?include=anony_home',(res)=>{
            let data = ''
            res.on('data',(chunk)=>{
                data += chunk
            })
            res.on('end',()=>{
                callback(data)
            })
        })
    }
      http.createServer((req,res)=>{
        let data = url.parse(req.url,true)
        res.writeHead(200,{
            "Content-Type":"application/json;charset=utf-8",
            "access-control-allow-origin":'*' // 设置cors头去解决跨域问题
        })
        if(data.pathname === '/api/getValue'){
            httpGet((data)=>{
                console.log(data)
                res.end(data)
            })
        }else{
            res.end("404")
        }
    }).listen(3000,()=>{
        console.log('server run ...')
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    node之http的post请求

    http还有post请求,语法上和http的get请求是不一样的。

    1. http的post请求的api为request,
    2. 第一个参数是配置对象,

    hostname是主机名,不要带http或者https
    port因为是post,默认是443
    path为请求的路径地址

     let options = {
            hostname:'m.xiaomiyoupin.com',
            port:'443',
            path:'/mtop/market/search/placeHolder',
            method:'POST',
            headers:{
                "content-type":'application/json'
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 返回值是一个对象,通过这个request的返回值req进行请求
    2. 返回值req还要进行write去携带请求参数,通过end去结束
        let req = https.request(options,(res)=>{
            let data = ''
            res.on('data',(chunk)=>{
                data += chunk
            })
            res.on('end',()=>{
                callback(data)
            })
        })
        req.write(JSON.stringify([{},{"baseParam":{"ypClient":1}}]))
        req.end()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    Linux简介
    Unity Animation--动画剪辑(动画游戏对象)
    【LeetCode-简单题】367. 有效的完全平方数
    51LA网站访问统计使用【图文教程】
    JS逆向爬虫案例分享(RSA非对称加密)
    鸿蒙ArkTs开发问题总结
    泛型擦除的理解
    【嵌入式项目应用】__cJSON在单片机的使用
    【MATLAB源码-第49期】基于蚁群算法(ACO)算法的栅格路径规划,输出最佳路径图和算法收敛曲线图。
    v-html有什么问题
  • 原文地址:https://blog.csdn.net/qq_38525381/article/details/126348106