Node Express 转发 GET 和 POST 请求

2018-03-07  本文已影响0人  ccw1078

转发GET 和 POST 请求到第三方的 API,实现方式如下,可单独建立一个 route.js 文件供 app.js 主程序文件引用

// ---app.js--- 文件

var express = require('express');
var app = express();


//拦截带api字样的url
var route = require('./route.js');
app.use('/api/*', route);
// ---route.js 文件---


var express = require('express');
var http = require('http');
//如果第三方api是https,则以上为var https = require('https')
//下面的代码 http 处相应更改为 https,并将80端口更新为 443
var router = express.Router();
var _fn;
var apiHost = '此处填写第三方 api 的域名' (例如: www.google.com)



//转发 get 请求
router.get('/', function(req, res, next){
    var path = req.originalUrl;
    _fn.getData(path, function(data){
        res.send(data);
    });
});

//转发 post 请求
router.post('/', function(req, res, next){
    var path = req.originalUrl;
    var content = req.body;
    _fn.postData(path, content, function(data){
        res.send(data);
    });
});

_fn = {
    getData: function(path, callback){
        http.get({
            hostname: apiHost,
            path: path
        }, function(res){
            var body = [];
            res.on('data', function(chunk){
                body.push(chunk);
            });
            res.on('end', function(){
                body = Buffer.concat(body);
                callback(body.toString());
            });
        });
    },
    postData: function(path, data, callback){
        data = data || {};
        content = JSON.stringify(data);
        var options = {
            host: apiHost,
            port: 80,
            path: path,
            method: 'POST',
            headers:{
              'Content-Type': 'multipart/form-data',
                          'Content-Length': content.length
              //根据提交请求类型不同而不同,以上适用多媒体文件
              //可查询各种报头类型代表的意思
            }
        };
        http.request(options, function(res){
            var _data = '';
            res.on('data', function(chunk){
                _data += chunk;
            });
            res.on('end', function(){
                callback(_data);
            });
        });
        req.write(content);
        req.end()
    }
};

module.exports = route; 
上一篇 下一篇

猜你喜欢

热点阅读