使用Restify+superagent做数据转发

最近为了解决跨域问题,做了一个Node数据转发服务器,使用到了Restify和superagent。

Restify 是nodejs的模块。虽然restify的API或多或少的参考了express,但restify不是一个MVC框架,它是一套为了能够正确构建REST风格API而诞生的框架。

而superagent不用多说,熟悉nodejs的同鞋应该都知道,superagent是nodejs里一个非常方便的客户端请求代理模块。

这个服务器的任务很简单,就是接收客户端发出的请求,并根据请求向第三方服务请求数据,并将返回的数据返回给客户端,同时在服务端设置的请求头,解决了跨域问题。

下面我以请求知乎日报的数据为例,放上部分代码:

这部分我对相关的api做了一个封装:

// api.js
var 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.js
var 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js项目实战开发是指利用Node.js技术栈进行实际的项目开发工作。通过使用Node.js及其相关工具和框架,开发人员可以快速构建高性能的Web应用、API接口、跨平台的桌面应用等。以下是一些常见的Node.js项目实战开发方法和步骤: 1. 安装Node.js和npm:首先需要在本地环境中安装Node.js和npm(Node Package Manager),这样才能使用Node.js的各种功能和工具。 2. 创建项目:使用命令行工具进入项目所在的文件夹,运行`npm init`命令来创建一个新的Node.js项目。这将生成一个`package.json`文件,用于管理项目的依赖和配置信息。 3. 安装依赖:根据项目需求,在`package.json`文件中添加所需的依赖项,并使用`npm install`命令安装这些依赖。 4. 使用Express框架:Express是一个流行的Node.js Web框架,可以简化项目的开发过程。通过使用Express,可以方便地创建路由、处理HTTP请求和响应、管理中间件等。可以使用`npm install express`命令安装Express,并在项目代码中引入和使用。 5. 使用其他框架和工具:除了Express,还可以根据项目需求选择和使用其他适合的框架和工具。例如,使用Electron框架可以构建跨平台的桌面应用,使用restify框架可以快速构建API接口,使用数据库框架可以实现数据的读写和操作等。 6. 开发和调试:在项目代码中编写业务逻辑和功能实现,并使用调试工具(如nodemon)对项目进行实时监测和自动重启。这样可以提高开发效率,节省手动重启项目的时间。 7. 测试和优化:在开发过程中,进行单元测试和集成测试,确保项目的功能和性能符合要求。根据测试结果进行性能调优和代码优化,提升项目的质量和效率。 8. 部署和发布:完成开发和测试后,将项目部署到服务器或云平台上,并配置好相关的环境和参数。根据项目需求,可以选择不同的部署方式,如使用Docker容器、服务器less架构等。 总结来说,Node.js项目实战开发需要掌握Node.js的基础知识和相关工具,选择适合的框架和工具,编写代码实现项目需求,并进行测试、优化和部署。通过不断的实践和学习,开发人员可以提升自己的Node.js项目实战能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值