使用Restify+superagent做数据转发
来源:互联网 发布:2016淘宝女鞋店铺排行 编辑:程序博客网 时间:2024/05/22 07:41
最近为了解决跨域问题,做了一个Node数据转发服务器,使用到了Restify和superagent。
Restify 是nodejs的模块。虽然restify的API或多或少的参考了express,但restify不是一个MVC框架,它是一套为了能够正确构建REST风格API而诞生的框架。
而superagent不用多说,熟悉nodejs的同鞋应该都知道,superagent是nodejs里一个非常方便的客户端请求代理模块。
这个服务器的任务很简单,就是接收客户端发出的请求,并根据请求向第三方服务请求数据,并将返回的数据返回给客户端,同时在服务端设置的请求头,解决了跨域问题。
下面我以请求知乎日报的数据为例,放上部分代码:
这部分我对相关的api做了一个封装:
// api.jsvar request = require('superagent');var root = 'http://news-at.zhihu.com/api/4';var _api_base = function (req, res, next, url, success, failure) { // 处理跨域问题 res.setHeader('Access-Control-Allow-Origin', '*'); request('GET', root + url) .accept('json') .end(function (err, resp) { if (err) { console.log('api error, HTTP CODE: ' + res.status); return; }; if (resp.body) { if (success) { success(resp.body); } else { // 将请求到的数据返回给客户端 res.send(resp.body); } } else { if (failure) { failure(resp.body); } else { console.log('error: ' + JSON.stringify(resp.body)); } } });};var Api = { // @最新消息 getLatestNews: function (req, res, next, success) { _api_base(req, res, next, '/news/latest'); }, // @消息内容获取与离线下载 getNewsContent: function (req, res, next) { var id = req.params.id; _api_base(req, res, next, '/news/' + id); }, // @过往消息 getOldNews: function (req, res, next) { var date = req.params.date; _api_base(req, res, next, '/news/before/' + date); }, // @新闻额外信息 // 输入新闻的ID,获取对应新闻的额外信息,如评论数量,所获的“赞”的数量 getNewsExtraInfo: function (req, res, next) { var id = req.params.id; _api_base(req, res, next, '/story-extra/' + id); }, // @新闻对应长评论查看 getLongComments: function (req, res, next) { var id = req.params.id; _api_base(req, res, next, '/story/' + id + '/long-comments'); }, // @新闻对应短评论查看 getShortComments: function (req, res, next) { var id = req.params.id; _api_base(req, res, next, '/story/' + id + '/short-comments'); }, // @主题日报列表查看 getThemesList: function (req, res, next) { _api_base(req, res, next, '/themes'); }, // @主题日报内容查看 getThemesContent: function (req, res, next) { var id = req.params.id; _api_base(req, res, next, '/theme/' + id) }, // @热门消息 getHotNews: function (req, res, next) { _api_base(req, res, next, '/news/hot'); }};module.exports = Api;
这部分便是转发服务器的具体实现:
// app.jsvar restify = require('restify');var Api = require('./api');var server = restify.createServer();server.get('/news/latest', Api.getLatestNews);server.get('/news/:id', Api.getNewsContent);server.get('/news/before/:date', Api.getOldNews);server.get('/story-extra/:id', Api.getNewsExtraInfo);server.get('/story/:id/long-comments', Api.getLongComments);server.get('/story/:id/short-comments', Api.getShortComments);server.get('/themes', Api.getThemesList);server.get('/theme/:id', Api.getThemesContent);server.get('/news/hot', Api.getHotNews);server.listen(8899, function () { console.log('%s listening at %s', server.name, server.url);});
完整项目我已经上传到了GitHub:戳这里
阅读全文
0 0
- 使用Restify+superagent做数据转发
- SuperAgent使用简介
- SuperAgent使用简介
- SuperAgent中文使用文档
- SuperAgent中文使用文档
- SuperAgent使用简介
- Nodejs转发带cookie请求(superagent)
- Restify
- SuperAgent
- [译] SuperAgent中文使用文档
- python转发数据,做web代理
- 使用restify构建纯粹的rest服务
- 使用 superagent 与 cheerio 完成简单爬虫
- 使用 superagent 与 cheerio 完成简单爬虫
- 使用IPtables 实现数据转发
- 使用IPtables 实现数据转发
- Http服务器--使用Http服务做转发
- node.js使用restify开发REST web services
- C# try catch
- C++内联函数
- 深入理解Spark 2.1 Core (二):DAG调度器的原理与源码分析
- redis学习日志七(api-列表的常用命令)
- 买二手房须走好七步 其中第三步为关键!
- 使用Restify+superagent做数据转发
- 宝宝如何喝水最科学,做家长的一定要知道
- Java编译时多态和运行时多态
- 第十八周:[leetCode] 74. Search a 2D Matrix
- vue学习之vue-resource
- [Leetcode] 226. Invert Binary Tree 解题报告
- js基础进阶2-3 面向对象(继承)
- 多线程jion方法
- Android进程的内存管理分析