• 前端培训丁鹿学堂: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
  • 相关阅读:
    区块链、NFT 与元宇宙中的稀缺性技术
    (十三)Java算法:基数排序(详细图解)
    数据库干货 | 防止重复记录的发生
    django框架管理员登录页面添加验证码功能
    新的阶乘(筛素数)--2023百度之星初赛第三场
    C++ 惯用法之 PIMPL (接口类设计技巧)
    实际项目中如何进行问题排查
    2022牛客蔚来杯第一场
    服务器系统和普通系统的区别
    多列等高实现
  • 原文地址:https://blog.csdn.net/qq_38525381/article/details/126348106