简述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. javascript_03-数据类型

    数据类型 JavaScript 和 Java 一样,也是有基本数据类型的.但也是有区别的. JavaScript中的数据类型 简单(基本.值)数据类型 number string boolean un ...

  2. Access denied for user 'test'@'%' to database 'mysql'

    1.问题描述 今天使用MySQL新建了一个用户,此处假设为test用户,用来作为某安装软件的配置用户(会新建大量的表及视图) mysql> create user 'test'@'%' iden ...

  3. 【DRF框架】restfull规范

    零:核心思想: 1.面对资源编程 2.根据HTTP请求方式的不同对资源进行不同的操作 一.协议 API与用户的通信协议,总是使用HTTPs协议. 二.域名 应该尽量将API部署在专用域名之下. htt ...

  4. hive之建立分区表和分区

    1. 建立分区表 create table 单分区表:其中分区字段是partdate,注意分区字段不能和表字段一样,否则会报重复的错 create table test_t2(words string ...

  5. CentOS阿里仓库停止openstack mitaka源服务报错------“No package centos-release-openstack-mitaka available.”

    之前学习了一个月的openstack的mitaka版本,部署完后放置一段时间,最近准备正式部署突然发现“No package centos-release-openstack-mitaka avail ...

  6. Docker那些事儿之编排工具docker-compose

    前面已经讲解过docker的一些基础使用,镜像创建的操作过程,如果大量容器需要同时部署,一个一个容器进行服务器上的部署,估计要疯掉,在使用上我们需要找到更好更便捷的使用方式,今天要讲解的容器编排工具d ...

  7. java中的switch

    switch 语句由一个控制表达式和多个case标签组成. switch 控制表达式支持的类型有byte.short.char.int.enum(Java 5).String(Java 7). swi ...

  8. mysql中一个字段升序,另一个字段降序

    mySql中,升序为asc,降序为desc.例如: 升序:select   *  from  表名 order by  表中的字段 asc(mysql中默认是升序排列,可不写) 降序:select   ...

  9. from module_name import var

    ######## a.py ######## aa = "Hello World" ####### b.py ######## from a import aa print aa  ...

  10. 【安卓进阶】Product Flavor基础玩法

    在安卓项目开发中,大多时候总是有测试环境.生产环境之类的区别,在不使用Product Flavor时,我们一般都是通过手工改动代码来实现测试环境.生产环境的切换. 这样就造成了项目管理上的不便,频繁的 ...