| 服务器之间请求是没有跨域限制的,我们可以利用node作为中间层,去请求别的服务器的接口,获取数据响应给自己定义的接口,实现转发。目的:1 解决跨域问题,2 如果多个接口在不同的服务器上处理跨域比较麻烦,node作为中间层容易维护。
 核心代码:利用http模块的get方法去请求数据
 前端请求:
  fetch('http://localhost:3000/api/getValue').then(response => {
                return  response.json()
            }).then(res=>{
                console.log(res)
            })
 node代理转发豆瓣的请求给前端,如果请求是https的,要引入https的模块 let https = require('https')
 封装豆瓣请求 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 ...')
})
 node之http的post请求http还有post请求,语法上和http的get请求是不一样的。 http的post请求的api为request,第一个参数是配置对象,
 hostname是主机名,不要带http或者httpsport因为是post,默认是443
 path为请求的路径地址
  let options = {
        hostname:'m.xiaomiyoupin.com',
        port:'443',
        path:'/mtop/market/search/placeHolder',
        method:'POST',
        headers:{
            "content-type":'application/json'
        }
    }
 返回值是一个对象,通过这个request的返回值req进行请求返回值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()
 |