node 后端代理服务器

通过访问一个服务器来获取其他服务器里面的数据

例如:访问a服务器,在页面展示b服务器里面的内容数据;则 可以通过a服务器通过代理得到b服务器里面的数据并渲染出来。
服务器与服务器之间没有跨域问题
在这里插入图片描述

方法一:原生

通过一个server1.js文件创建的服务器向另一个server2.js文件创建的服务器发送请求数据.

server1.js文件

var http = require('http');
var app = http.createServer(function(req,res){
    if(req.url === '/'){
        // 服务器向服务发生请求 叫做后端代理服务器;不存在跨域问题
        // http.get() 向另一个服务器发送请求
        // 参一:请求地址;请求参数在请求地址上进行拼接
        // 请求完毕处理
        http.get('http://localhost:8000/test',function(data){
            // console.log(data);
            // 1: 代理请求
            var str = '';
            // 请求数据发送变化时
            data.on('data',function(clumh){
                console.log(clumh);
                str += clumh;
            });
            // 请求数据完毕
            data.on('end',function(){
                res.end(str)
            })
        })
    }else{
        res.end('出错了');
    }
})
app.listen(3000,err=>(console.log('node server1 3000端口号')));

server2.js文件

var http = require('http');
var app = http.createServer(function(req,res){
    if(req.url == '/test'){
        res.end('get server2 is succeed')
    }
})
app.listen(8000,error=>(console.log('node server2 8000端口号')));

方法二:querystring

因为拼接字符串提麻烦了;所以通过内置模块querystring 完成后端代理服务器

qs1.js文件

// 因为拼接字符串提麻烦了;所以通过内置模块querystring 完成后端代理服务器
var http = require('http');
var qs = require('querystring');

// 请求参数
var parms = {
    a: '11',
    b: '22'
}

var content = qs.stringify(parms);// 将对象变为字符串  a=11&b=22
// console.log(res);
// var obj = qs.parse(res); // 将字符串变为对象
// console.log(obj);
var options = {
    hostname: 'localhost', // ip  
    port: 8000,  // 端口号
    path: '/test', // 接口地址
    method: 'get',  // 请求方式
    headers: {  // 设置请求头
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    }
};

var app = http.createServer(function (req, res1) {
    if (req.url === '/') {
        // http.require() 想服务器发送请求;参一:对象;接口的配置信息 
        var req1 = http.request(options, function (res) {
            // res 是发送请求 成功后响应的对象
            console.log('STATUS: ' + res.statusCode); // 状态吗;200成功
            console.log('HEADERS: ' + JSON.stringify(res.headers)); //
            res.setEncoding('utf8');// 设置头部信息
            // 监听qs2服务器响应数据变化的事件
            res.on('data', function (chunk) { // chunk 是服务器响应的数据
                console.log('BODY: ' + chunk);
                res1.end(chunk);
            });
        })
        req1.on('error', function (e) {  
            console.log('problem with request: ' + e.message);  
        });  
          
        // 将数据写入请求体
        req1.write(content);//注意这个地方  
          
        req1.end();
    }
})

app.listen(3000,err=>(console.log('qs1 is 3000 ok')))

qs2.js文件

// 因为拼接字符串太麻烦了,所以通过内置模块 querystring 完成后端代理服务器

var http = require('http');

var app = http.createServer(function(req,res){
    console.log('aaa');
    if(req.url == '/test'){
        res.end('qs1 is success')
    }
})
app.listen(8000,err=>(console.log('qs2 is 8000 ok')))

方法三:request

比较简单的方法,推荐

request 租用 node 代理服务器的模块

request.js

// request 租用 node 代理服务器的模块
var request = require('request');

var http = require('http');
var app = http.createServer(function (req, res) {

    //request 作用发送请求;参一:请求行配置信息;请求地址;请求参数请求方式等
    //----> 参二:是响应处理函数
    request('https://www.baidu.com', function (error, response, body) {
        // ---> error 错误
        console.log(body)//打印百度首页html内容
        res.end(body)
    })
})
app.listen(3000,function(){
    console.log('ok');
    
})

// request({
//     url: url,//请求路径
//     method: "POST",//请求方式,默认为get
//     headers: {//设置请求头
//         "content-type": "application/json",
//     },
//     body: JSON.stringify(requestData)//post参数字符串
// }, function(error, response, body) {
//     if (!error && response.statusCode == 200) {
//     }
// }); 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值