nodejs做中间层,转发请求
简述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做中间层,转发请求的更多相关文章
- nodeJs 使用 express-http-proxy 转发请求
开发过程中经常需要用到 nodeJs做转发层 使用express配合 express-http-proxy 可以轻松的完成转发 使用过程: 安装 express-http-proxy npm inst ...
- node中间层转发请求
前台页面: $.get("/api/hello?name=leyi",function(rps){ console.info(rps); }); node中间层(比如匹配api开头 ...
- nodejs做中间层,向后端取数据
var http=require('http'): http.get('http://baidu/dksapi/weiboLive/GetSquareLive?pagecount=1&pag ...
- Nodejs做整站转发
刚接触nodejs,做个东西练下手,通过nodejs直接转发整站,原本想把内容全翻译成英文,但google对流量行审查,被封IP,所以就没啥用了, 效果像这样 var b = function (a, ...
- 转: Nodejs 发送HTTP POST请求实例
项目里面需要用到使用NodeJs来转发HTTP POST请求,把过程记录一下: exports.sendEmail = function (req, res) { res.send(200, req. ...
- node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记
用户无法直接访问后台接口 需要node端转发请求 并将数据以.csv文件格式生成以供客户端下载. 很不幸出现了中文乱码的问题 挖了各种坟帖,下了各种依赖包,csv.json2csv.bufferHel ...
- windows下百度离线人脸识别本地部署与使用(nodejs做客户端,c++做服务端,socket做通信)
1.离线人脸识别本地部署 详情请阅读百度人脸识别官网 2.nodejs做socket通信的客户端 为什么不直接通过调用c++编译的exe获得人脸识别结果? 原因:exe运行时会加载很多模型而消耗很多时 ...
- Feign 自定义编码器、解码器和客户端,Feign 转发请求头(header参数)、Feign输出Info级别日志
Feign 的编码器.解码器和客户端都是支持自定义扩展,可以对请求以及结果和发起请求的过程进行自定义实现,Feign 默认支持 JSON 格式的编码器和解码器,如果希望支持其他的或者自定义格式就需要编 ...
- Nodejs Http发送post请求
Nodejs Http发送post请求 var http = require('http'); function epay(params) { console.log(" COME IN& ...
随机推荐
- javascript_03-数据类型
数据类型 JavaScript 和 Java 一样,也是有基本数据类型的.但也是有区别的. JavaScript中的数据类型 简单(基本.值)数据类型 number string boolean un ...
- Access denied for user 'test'@'%' to database 'mysql'
1.问题描述 今天使用MySQL新建了一个用户,此处假设为test用户,用来作为某安装软件的配置用户(会新建大量的表及视图) mysql> create user 'test'@'%' iden ...
- 【DRF框架】restfull规范
零:核心思想: 1.面对资源编程 2.根据HTTP请求方式的不同对资源进行不同的操作 一.协议 API与用户的通信协议,总是使用HTTPs协议. 二.域名 应该尽量将API部署在专用域名之下. htt ...
- hive之建立分区表和分区
1. 建立分区表 create table 单分区表:其中分区字段是partdate,注意分区字段不能和表字段一样,否则会报重复的错 create table test_t2(words string ...
- CentOS阿里仓库停止openstack mitaka源服务报错------“No package centos-release-openstack-mitaka available.”
之前学习了一个月的openstack的mitaka版本,部署完后放置一段时间,最近准备正式部署突然发现“No package centos-release-openstack-mitaka avail ...
- Docker那些事儿之编排工具docker-compose
前面已经讲解过docker的一些基础使用,镜像创建的操作过程,如果大量容器需要同时部署,一个一个容器进行服务器上的部署,估计要疯掉,在使用上我们需要找到更好更便捷的使用方式,今天要讲解的容器编排工具d ...
- java中的switch
switch 语句由一个控制表达式和多个case标签组成. switch 控制表达式支持的类型有byte.short.char.int.enum(Java 5).String(Java 7). swi ...
- mysql中一个字段升序,另一个字段降序
mySql中,升序为asc,降序为desc.例如: 升序:select * from 表名 order by 表中的字段 asc(mysql中默认是升序排列,可不写) 降序:select ...
- from module_name import var
######## a.py ######## aa = "Hello World" ####### b.py ######## from a import aa print aa ...
- 【安卓进阶】Product Flavor基础玩法
在安卓项目开发中,大多时候总是有测试环境.生产环境之类的区别,在不使用Product Flavor时,我们一般都是通过手工改动代码来实现测试环境.生产环境的切换. 这样就造成了项目管理上的不便,频繁的 ...