Web前端之路

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

2017-03-15  本文已影响2262人  baby熊_熊姐

接着第一篇续,自动转发就是浏览器的请求,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模板部分。

上一篇 下一篇

猜你喜欢

热点阅读