博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs实践--请求转发superagent框架
阅读量:7263 次
发布时间:2019-06-29

本文共 1983 字,大约阅读时间需要 6 分钟。

hot3.png

官方文档

 

初学,拿来练手,nodejs代理有成熟方案:,推荐使用。(据说更好的代理服务器是nginx)

问题

客户端(浏览器)通过ajax请求第三方服务器,会遇到跨域问题,可通过nodejs服务器做中介来解决跨域问题。

解决方案

客户端发起请求到nodejs服务器,nodejs收到后请求第三方服务器取得数据,返回给客户端。

client ajax --> nodejs recived --> nodejs send request --> respone to client

范例

不使用外部package的代码

var http = require('http');// 创建http服务var app = http.createServer(function (req, res) {    // 查询本机ip    var sreq = http.request({        host:     'sneezryworks.sinaapp.com', // 目标主机        path:     '/ip.php', // 目标路径        method:   req.method // 请求方式    }, function(sres){        sres.pipe(res);        sres.on('end', function(){            console.log('done');        });    });    if (/POST|PUT/i.test(req.method)) {        req.pipe(sreq);    } else {        sreq.end();    }});// 访问127.0.0.1:3001查看效果app.listen(3001);console.log('server started on 127.0.0.1:3001');

使用的代码

var http = require('http');// 创建http服务var app = http.createServer(function (req, res) {    // 使用了superagent来发起请求    var superagent = require('superagent');    // 查询本机ip,这里需要根据实际情况选择get还是post    var sreq = superagent.get('http://sneezryworks.sinaapp.com/ip.php');    sreq.pipe(res);    sreq.on('end', function(){        console.log('done');    });});// 访问127.0.0.1:3001查看效果app.listen(3001);console.log('server started on 127.0.0.1:3001');

使用 + 的代码

var express = require('express');var app = express();app.get('/', function (req, res) {    // 使用了superagent来发起请求    var superagent = require('superagent');    // 查询本机ip,这里需要根据实际情况选择get还是post    var sreq = superagent.get('http://sneezryworks.sinaapp.com/ip.php');    sreq.pipe(res);    sreq.on('end', function(){        console.log('done');    });});app.listen(3001);console.log('Express started on 127.0.0.1:3001');

后记

如果需要对第三方服务器返回的内容做处理,可以在sreqdata事件的回调方法中进行,而不是直接使用pipe方式。

TODO

代理重定向:接收到客户端ajax请求后,重定向到第三方服务器,后续通信不再需要nodejs介入,实现nodejs server搭桥牵线功能,如果可以实现(估计已经实现),对文件上传到第三方服务器很有帮助吧。

补充

以前没搞过服务器,对请求转发、请求代理、反向代理这类东西不熟悉,如果叫法有误,烦请指正,顺便求科普下 :p

参考资料

转载于:https://my.oschina.net/spinachgit/blog/1936698

你可能感兴趣的文章
1682亿!!阿里工程师如何喝着茶创造双11奇迹?
查看>>
《音乐达人秀:Adobe Audition实战200例》——1.3 数字录音记录生活越来越便捷
查看>>
东半球最先进的 debug 技巧
查看>>
《CCNP安全防火墙642-618认证考试指南》——第1章Cisco ASA自适应安全设备概述
查看>>
ToroDB —— 基于 PostgreSQL 的 JSON 数据库
查看>>
尊敬的开发世界,现出你的梦魇吧,我来了
查看>>
《Java多线程编程核心技术》——1.9节yield方法
查看>>
《WebGL入门指南》——第2章,第2.5节本章小结
查看>>
《Android开发基础教程》——6.2节Gallery界面组件——画廊展示
查看>>
《图数据库》——1.4 小结
查看>>
《Android 应用案例开发大全(第3版)》——第1.3节Android开发环境的搭建
查看>>
《Python数据可视化编程实战》——5.3 创建3D直方图
查看>>
中断引起的nio连接断开
查看>>
《Lua游戏AI开发指南》一1.2 小结
查看>>
PL/SQL学习笔记(一)
查看>>
Apache Storm 官方文档 —— 序列化
查看>>
《Adobe Dreamweaver CC经典教程》——1.7 创建自定义的快捷键
查看>>
ArrayList
查看>>
为你的响应式设计提速
查看>>
GCC 内联汇编 HOWTO
查看>>