简述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. git命令——git commit

    功能 将暂存区中的更改记录到仓库. 加到staging area里面的文件,是表示已经准备好commit的.所以在commit修改之前,务必确定所有修改文件都是staged的.对于unstaged的文 ...

  2. Springboot分别使用乐观锁和分布式锁(基于redisson)完成高并发防超卖

    原文 :https://blog.csdn.net/tianyaleixiaowu/article/details/90036180 乐观锁 乐观锁就是在修改时,带上version版本号.这样如果试图 ...

  3. Go 性能分析之案例一

    思考 相信大家在实际的项目开发中会遇到这么一个事,有的程序员写的代码不仅bug少,而且性能高:而有的程序员写的代码能否流畅的跑起来,都是一个很大问题.而我们今天要讨论的就是一个关于性能优化的案例分析. ...

  4. Arduino Tian开发板:一个功能强大的天气预报中心

    每天都在出现新的连接设备. Arduino携手云平台一起加入这场战斗,于是出现了一个新的挑战者 - Arduino Tian! 使用python和经典Arduino框架,本教程将引导您将您的Ardui ...

  5. 使用Atmel Studio编程Arduino Uno开发板

    使用Atmel Studio 7编程Arduino Uno开发板非常简单.Arduino Uno开发板是使用AVR微控制器的嵌入式应用开发的著名平台之一. 大多数人通常会使用Arduino自己的软件工 ...

  6. YUSS Round 1

    YUSS Round 1 A. 国庆快乐 签到题. #include<bits/stdc++.h> using namespace std; int main() { printf(&qu ...

  7. 通过 cross apply 实现函数转换成表并与原表进行关联

    create table tb_cross_apply ( id int identity, multivalue ) ) insert into tb_cross_apply VALUES ('A| ...

  8. JS中map、some、every、filter方法

    简介 every()方法用于检测数组中所有元素是否都符合指定条件,若符合返回true,否则返回false:不会对空数组进行检测,不会改变原来的数组. some()方法用于检测数组中的元素是否有满足指定 ...

  9. 函数指针,使用qsort,进行结构体排序

    #include <stdio.h> #include <stdlib.h> #define STU_NAME_LEN 16 /*学生信息*/ typedef struct s ...

  10. ueditor粘贴word中图片

    最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...