美文网首页Web前端之路
用node作中间层(2)-自动转发请求及request篇

用node作中间层(2)-自动转发请求及request篇

作者: baby熊_熊姐 | 来源:发表于2017-03-15 13:41 被阅读2262次

    接着第一篇续,自动转发就是浏览器的请求,node接收到后按照request接收的格式原封不动的将内容对应起来,传递给后端。

    包含内容有头部(包含了cookie信息),请求参数,请求体,方法和域名、文件等。在这里非常感谢一位朋友的帮助。

    在app.js中,路由请求中间件的前面,有一段逻辑如下:

    app.use(function(req, res, next) {

    var f = (/接口正则/).test(req.path);

    if (!f) {

    return;

    }

    req.proxy.request(null, function(err, response, body) {

    if (!!err) {

    next(err)

    } else {

    for (var key in response.headers) {

    res.set(key, response.headers[key])

    }

    try {

    body = JSON.parse(body)

    } catch(e) {

    console.error(e);

    }

    res.send(body);

    }

    });

    });

    以上实现的是自动转发请求,当node接收到的请求符合接口规则时,node将请求原封不动的转发出去。

    app.use(function(req, res, next) {

    req.proxy.request({

    method: "GET",

    url: "接口地址",

    qs: req.query

    }, function(err, response, body) {

    var data = body;

    try {

    data = JSON.parse(body);

    } catch(e) {

    next(e)

    }

    if (!res.locals.partials) {

    res.locals.partials = {}

    }

    //用全局变量存储,方便渲染模板调用

    res.locals.partials.data = data.data;

    next();

    });

    });

    以上是针对某些页面,在渲染模板时,需要是使用相同的变量,最典型的就是头部公共部分去获取用户的相关信息。

    {

    method: “GET",

    url: “接口地址",

    qs: req.query

    }

    这里将覆盖转发中proxy中options中相关内容。

    真正转发出去的内容见下方:

    proxy.js中内容:

    var request = require("request");

    var fs = require("fs");

    function Proxy() {

    this.protocol = "http://";

    this.host = "api.inner.utuotu.com";

    }

    Proxy.prototype.request = function(options, callback) {

    var _options = {

    form: this.req.body,

    qs: this.req.query,

    method: this.req.method,

    url: this.protocol + this.host + this.req.path,

    headers: this.req.headers,

    }

    options = options || {};

    for (var k in options) {

    _options[k] = options[k];

    }

    _options.headers.host = this.host;

    //转发文件

    if (!!this.req.file) {

    _options.attachments = [

    fs.createReadStream(this.req.file.path)

    ]

    }

    request(_options, callback);

    }

    exports.proxy = Proxy;

    下回讲解handlebar模板部分。

    相关文章

      网友评论

        本文标题:用node作中间层(2)-自动转发请求及request篇

        本文链接:https://www.haomeiwen.com/subject/ghylnttx.html