• 前端培训丁鹿学堂: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
  • 相关阅读:
    【笔试刷题训练】day_17
    java引入lettuce报错
    基于Python实现并对比线性分类器与非线性分类器
    创意电子学-小知识:电容器
    针对KF状态估计的电力系统虚假数据注入攻击研究(Matlab代码实现)
    python爬虫实战——抖音
    Async的线程池使用的哪个?
    【C++】-- 红黑树详解
    搭建嵌入式GDB调试环境以及VSCode+gdbserver 图形化调试
    JAVA【泛型】详解
  • 原文地址:https://blog.csdn.net/qq_38525381/article/details/126348106