美文网首页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篇

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

  • node+yog2+swig

    node 请求的流程 1、一个URL的请求会先去请求node中间层,node中间层向后端发送请求(如果需要),最后...

  • 请求转发和请求包含

    请求转发和请求包含 请求转发rd.forward(request,reponse);请求包含rd.include(...

  • 2018-12-06

    RequestMapping 映射请求Request method 请求方法forward 转发redirect ...

  • node 接收、发送 form-data 数据

    一、背景:node作为中间层服务转发数据,接收客户端图片,并传至其他服务器。(基于 koa2框架、node-fet...

  • 重定向与转发

    请求重定向与请求转发的区别: 1.写法: 转发: request.getRequestsDispatcher.fo...

  • servlet请求转发

    请求转发时会共享request变量,但请求跳转时不共享该变量。通过request.sendRedirect()实现...

  • Node.js HTTP请求:Request模块入门学习

    目录前言安装和配置RequestGET请求POST请求 前言 Request是Node.js中的一个模块,目标是用...

  • Java请求转发和重定向的区别

    原作者:向右奔跑原博客链接:Java请求转发和重定向的区别 一、请求转发和重定向 1)请求转发: request....

  • node请求java接口

    node请求后台接口首先需要一个request模块 npm install request --save va...

网友评论

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

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