`

NodeJS调用第三方RestAPI的实现

 
阅读更多
var http = require('http'),
    https = require('https'),
    Q = require('Q');




var util = {
    /**
     * HOW TO Make an HTTP Call - GET
     *
     *  options for GET
     *  var optionsget = {
     *      hostname : 'api.t.sina.com.cn',
     *      path : '//provinces.json' // the rest of the url with parameters if needed
     *  };
     */
    get : function(optionsget){
        return this.request(optionsget,'GET',null,false);
    },
    post : function(optionspost,jsonObject){
        return this.request(optionspost,'POST',jsonObject,false);
    },
    /**
     * HOW TO Make an HTTPs Call - GET
     *
     *  options for GET
     *  var optionsget = {
     *      hostname : 'graph.facebook.com',
     *      path : '/youscada' // the rest of the url with parameters if needed
     *  };
     */
    secureGet : function(optionsget){
        return this.request(optionsget,'GET',null,true);
    },
    /**
     * HOW TO Make an HTTPs Call - POST
     *
     *  options for POST
     *  var optionspost = {
     *      hostname : 'graph.facebook.com',
     *      path : '/youscada/feed?access_token=your_api_key'
     *  };
     */
    securePost : function(optionspost,jsonObject){
        return this.request(optionspost,'POST',jsonObject,true);
    },
    /**
     *  var options = {
     *      hostname : 'graph.facebook.com',
     *      path : '/youscada/feed?access_token=your_api_key'
     *  }
     */
    request : function(options,method,jsonObject,isSecure){
        if(!(options && options.hostname && options.path)){
            throw new Error('Omit property : "hostname" or "path".');
        }

        options.method = method || 'GET';
        options.port = options.port || 80;

        if(Object.prototype.toString.call(jsonObject) === '[object Object]'){
            jsonObject = JSON.stringify(jsonObject);
            var postheaders = {
                'Content-Type' : 'application/json',
                'Content-Length' : Buffer.byteLength(jsonObject, 'utf8')
            };
            options.headers = postheaders;
        }

        var protocal = http;

        if(isSecure){
            options.port = 443;
            protocal = https;
        }

        var deferred = Q.defer(); 
        var body = "";
        // do the POST call
        var request = protocal.request(options, function(res) {
         
            res.on('data', function(trunk) {
                body += trunk;
            }).on('end',function(){
                deferred.resolve(body);
            }).on('errer',function(err){
                deferred.reject(err);
            });
        });
         
        // write the json data
        if(options.method === 'POST'){
            request.write(jsonObject);
        }
        
        request.end();
        request.on('error', function(e) {
            deferred.reject(e);
        });

        return deferred.promise;
    }

};

module.exports = util;

 

……

router.get('/rest', function(req, res,next) {
    var promise = restUtil.get({
        hostname : "api.t.sina.com.cn",
        path : "/provinces.json"
    });

    promise.then(function(data){
        res.send(data);
    },function(err){
        next(err);
    });
});

……

 

分享到:
评论

相关推荐

    team.dashboard.jira.api:nodejs项目访问jira rest api

    在Node.js项目中,可以使用内置的http模块或第三方库(如axios或request)来设置请求头,添加必要的认证信息。 2. **API调用**:JIRA REST API提供了丰富的资源路径,如获取用户信息、创建问题、更新问题状态等。在...

    关于java请求nodejs

    然而,对于更复杂的任务,如处理cookies、管理连接池或支持HTTPS,开发者通常会使用第三方库,如Apache HttpClient或OkHttp。这些库提供了更高级的功能,使API调用更加便捷。 2. **Node.js HTTP服务器**: 在Node....

    CallExternalApiUsingNodeJs:使用Node JS调用外部API。 全功能代码

    在Node.js中,我们可以使用内置的http模块或者第三方库如axios或request来发起REST API调用。 4. **调用API**: 调用API的基本步骤包括:构造请求URL、设置请求头(headers)、定义请求方法(GET、POST等)、可能...

    coordtransform_angular.zip

    对于这些坐标系统之间的转换,有多种方法可以实现,比如使用数学公式直接计算或者调用第三方库。在Node.js环境中,可以利用如`proj4js`这样的库来处理坐标转换。此外,RESTful API的使用意味着我们可以构建一个Web...

    NideShop基于Node.jsMySQL开发的高仿网易严选开源B2C商城服务端

    7. **支付集成**:可能包含第三方支付接口的集成,如支付宝、微信支付等。 8. **错误处理**:良好的错误处理机制,确保服务的稳定性。 9. **性能优化**:缓存策略、数据库连接池、异步操作优化等提升系统性能的方法...

    secretChatHTTPServer:2015年第一学期人体设计项目(手机)密聊NodeJS服务器

    Node.js的`try...catch`语句和第三方模块如`winston`可以帮助我们实现这一目标。 7. **性能优化**:考虑到手机资源有限,服务器需要优化响应速度,减少不必要的计算和数据传输。可以利用缓存策略、压缩响应内容、...

    koa-service:web框架,涵盖cron,hook,c ++插件等

    简介 1、包含Rest-ful、...方便对第三方的C++调用及分离计算密集型业务 5、用神经网络实现一个关于分类的计算与预测简易模型一,目录结构|____README.md # 项目说明文件|____app.js # 入口文件|____Dockerfile

    marvel-backend:Marvel API Explorer-后端

    "marvel-backend: Marvel API Explorer 后端"项目是一个基于Node.js、Express.js构建的后端服务,专门用于探索和利用...通过这个项目,你可以深入了解如何构建一个高效、健壮的API服务,并且熟悉与第三方API的集成。

    koa-ctp-service:用koa,c ++写的量化交易系统

    4、用C++编写Node扩展库,方便对第三方的C++调用及分离计算密集型业务 5、采用Docker方式部署,Git-ci自动测试发布、Gulp集成开发,Mocha单元测试 一,项目目录结构 |____README.md # 项目说明文件 |____app.js # ...

Global site tag (gtag.js) - Google Analytics