简述node中间层的优势

node中间层,可以解决前端的跨域问题,因为服务器端的请求是不涉及跨域的,跨域是浏览器的同源策略导致的,关于跨域可以查看跨域复习
使用node坐中间层,方便前后端分离,后端只需要提供数据接口,不必关心前端业务逻辑的实现。
通过node中间层前端可以将数据再次整合扩展,使用自己的数据结构render渲染页面。

1.安装node环境,网上很多教程,大家可以自行百度

2.安装express

npm i express -g --save-dev

3.安装express-generator

$ npm install express-generator -g --save

express-generator可以帮我们生成一个目录结构。

执行:

express myproject

后,生成目录结构。
在这里我发现一个小坑,就是配置模板引擎的时候,假如我们不想用jade

 /*引用模板引擎*/
var template = require('art-template');
var express_template = require('express-art-template');
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('html', express_template);
app.set('view engine', 'html');

这是我配置模板的配置文件中的截取,已使用腾讯的art-template为例子,app.engine('html', express_template);将模板引擎绑定到views目录下的html文件,app.set('view engine', 'html');设置模板引擎。这里大家可以参考express的官方文档,说明的很清楚。

使用request请求php服务器:
request不是node的核心模块,首先我们需要安装它,关于request,可以参考我的另一篇文章:npm-request或者去到npm官网有更详尽的介绍。

npm i request --save-dev

服务器端转发请求的代码:

 var request = require('request');
/* GET home page. */
router.get('/', function(req, res, next) {
// 请求地址http://127.0.0.1/~haha/interf/a.php
request('http://127.0.0.1/~haha/interf/a.php',function(error,response,body){
/*判断请求是否成功*/
if (!error && response.statusCode == 200) {
/*把字符串转换为json*/
var data=JSON.parse(body);
/*渲染模板*/
res.render('index', data);
}
});
});

如果不想使用request模块,我们也可以使用node的内置模块http:

var http = require('http');
router.get('/post', function(req, res) {
const postData=querystring.stringify({
'msg' : 'Hello World!'
});
var opt = {
hostname:'127.0.0.1',
path:'/~donghao/interf/a.php',
method:'POST',
headers:{
'Content-Type' : 'application/x-www-form-urlencoded',// 不写这个参数,后台会接收不到数据
'Content-Length' : postData.length
}
}
const request = http.request(opt,function (response) {
console.log('STATUS:' + response.statusCode);
console.log('HEADERS:' + JSON.stringify(response.headers));
var renderData = ''
response.setEncoding('utf8');
response.on('data',function(body){
renderData+=body;
});
response.on('end',function(){
//请求结束
console.log('end');
res.render('index',JSON.parse(renderData));
});
response.on('error',function(e){
if(e){
console.log(e);
}
})
});
//post方法里
request.on('error', function(e) {
console.error('请求遇到问题:'+ e.message);
});
request.write(postData,'utf-8');
request.end();
});

nodejs做中间层,转发请求的更多相关文章

  1. nodeJs 使用 express-http-proxy 转发请求

    开发过程中经常需要用到 nodeJs做转发层 使用express配合 express-http-proxy 可以轻松的完成转发 使用过程: 安装 express-http-proxy npm inst ...

  2. node中间层转发请求

    前台页面: $.get("/api/hello?name=leyi",function(rps){ console.info(rps); }); node中间层(比如匹配api开头 ...

  3. nodejs做中间层,向后端取数据

    var  http=require('http'): http.get('http://baidu/dksapi/weiboLive/GetSquareLive?pagecount=1&pag ...

  4. Nodejs做整站转发

    刚接触nodejs,做个东西练下手,通过nodejs直接转发整站,原本想把内容全翻译成英文,但google对流量行审查,被封IP,所以就没啥用了, 效果像这样 var b = function (a, ...

  5. 转: Nodejs 发送HTTP POST请求实例

    项目里面需要用到使用NodeJs来转发HTTP POST请求,把过程记录一下: exports.sendEmail = function (req, res) { res.send(200, req. ...

  6. node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记

    用户无法直接访问后台接口 需要node端转发请求 并将数据以.csv文件格式生成以供客户端下载. 很不幸出现了中文乱码的问题 挖了各种坟帖,下了各种依赖包,csv.json2csv.bufferHel ...

  7. windows下百度离线人脸识别本地部署与使用(nodejs做客户端,c++做服务端,socket做通信)

    1.离线人脸识别本地部署 详情请阅读百度人脸识别官网 2.nodejs做socket通信的客户端 为什么不直接通过调用c++编译的exe获得人脸识别结果? 原因:exe运行时会加载很多模型而消耗很多时 ...

  8. Feign 自定义编码器、解码器和客户端,Feign 转发请求头(header参数)、Feign输出Info级别日志

    Feign 的编码器.解码器和客户端都是支持自定义扩展,可以对请求以及结果和发起请求的过程进行自定义实现,Feign 默认支持 JSON 格式的编码器和解码器,如果希望支持其他的或者自定义格式就需要编 ...

  9. Nodejs Http发送post请求

    Nodejs  Http发送post请求 var http = require('http'); function epay(params) { console.log(" COME IN& ...

随机推荐

  1. Windows下动态库的制作与使用

    创建静态库

  2. linux网络编程之socket编程(八)

    学习socket编程继续,今天要学习的内容如下: 先来简单介绍一下这五种模型分别是哪些,偏理论,有个大致的印象就成,做个对比,因为最终只会研究一个I/O模型,也是经常会用到的, 阻塞I/O: 先用一个 ...

  3. JDBC课程3--通过ResultSet执行查询操作

    内容:  ResultSet 结果集,封装了使用JDBC 进行查询;JDBCTools.release(rs,st, conn); 这个模块进行了更新, 同时结束的时候也关闭ResultSet,结束该 ...

  4. main方法中参数"String[ ] args"详解

    1.在编写完一个有主方法的java文件时,需要在cmd窗口中先编译此java文件(javac xxx.java),然后再运行(java xxx) 其实在运行java xxx的时候如果后面跟着参数用空格 ...

  5. sql 索引的使用 转载:https://www.cnblogs.com/xiaoyangjia/p/11267191.html#mysql_performance

    B-Tree索引的3个限制: 如果不是按照索引的最左列开始查找,则无法使用索引 不能跳过索引中的列.如果联合索引(a,b,c) ,如果使用条件a和c条件查询,那么只能使用索引的第一列a 如果查询中有某 ...

  6. kafka读书笔记《kafka并不难学》

    ======第一章 1 在高并发场景,如大量插入.更新数据库会导致锁表,导致连接数过多的异常,此时需要消息队列来缓冲一下.消息队列通过异步处理请求来缓解压力 2 消息队列采用异步通信机制消息队列拥有先 ...

  7. Luogu P4198 楼房重建 (李超线段树)

    题目 传送门 题解 首先转化成到(0,0)(0,0)(0,0)的斜率. 那么就是求多少个点是前缀最大值. 做法是线段树,用gao(i,x)gao(i,x)gao(i,x)表示在iii区间内,之前最大值 ...

  8. 【Winfrom-无边框窗体】Winform如何拖动无边框窗体?

    去掉边框 this.FormBorderStyle = FormBorderStyle.None; 方法一: Point mouseOff;//鼠标移动位置变量 bool leftFlag;//标签是 ...

  9. Linux文件权限符号说明

    为了控制权限,Linux首先对于将操作的用户分为:用户.用户组和其他,这三个概念. 每个文件都会属于某个用户,而一个用户可以属于多个用户组,而不属于该用户组的用户,则属于其他.因此,每个文件的操作权限 ...

  10. RSA公钥私钥原理及作用

    RSA算法广泛应用与加密与认证两个领域 1.加密(保证数据安全性) 使用公钥加密,需使用私钥解密. 这种广泛应用在保证数据的安全性的方面,用户将自己的公钥广播出去,所有人给该用户发数据时使用该公钥加密 ...