Express 路由、Ejs 、静态文件托管、中间件

一、 Express 简单介绍

Express 是一个基于 Node.js 平台,快速、开放、极简的 web 开发框架,它提供一系 列强大的特性,帮助你创建各种 Web 和移动设备应用。

Express 官网:

  • 英语官网:http://expressjs.com/
  • 中文官网:http://www.expressjs.com.cn/

二、 Express 安装使用

2.1 安装:

安装 Express 框架,就是使用 npm 的命令。

npm install express --save

–save 参数,表示自动修改 package.json 文件,自动添加依赖项。

2.2 简单使用:

//1.引入 var express = require('express'); 
var app = express(); //2.配置路由 
app.get('/', function (req, res) { res.send('Hello World!'); 
}); //3.监听端口 
app.listen(3000,'127.0.0.1');

2.3 完整 Demo

var express=require('express'); /*引入 express*/ 
var app=new express(); /*实例化 express 赋值给 app*/ //配置路由 匹配 URl 地址实现不同的功能 
app.get('/',function(req,res){ res.send('首页'); 
}) app.get('/search',function(req,res){ res.send('搜索'); 
}) app.get('/login',function(req,res){ res.send('登录'); 
}) app.get('/register',function(req,res){ res.send('注册'); 
}) app.listen(3000);

三、 Express 框架中的路由

路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等) 组成的,涉及到应用如何响应客户端对某个网站节点的访问

3.1 简单的路由配置

当用 get 请求访问一个网址的时候,做什么事情:

app.get("网址",function(req,res){ });

当用 post 访问一个网址的时候,做什么事情:

app.post("网址",function(req,res){});

user 节点接受 PUT 请求

app.put('/user', function (req, res) { res.send('Got a PUT request at /user'); 
});

user 节点接受 DELETE 请求

app.delete('/user', function (req, res) { res.send('Got a DELETE request at /user'); 
});

动态路由配置:

app.get("/user/:id",function(req,res){ var id = req.params["id"]; res.send(id); 
});

在这里插入图片描述
路由的正则匹配:(了解)

app.get('/ab*cd', function(req, res) { res.send('ab*cd'); 
});

路由里面获取 Get 传值:

app.get('/news, function(req, res) { console.log(req.query); 
});

在这里插入图片描述

四、 Express 框架中 ejs 的安装

使用 Express 中 ejs 的安装: npm install ejs --save
Express 中 ejs 的使用:

在这里插入图片描述

4.1 指定模板位置 ,默认模板位置在 views
app.set('views', __dirname + '/views');
4.2 Ejs 引入模板
<%- include (‘header.ejs’) %>
4.3 Ejs 绑定数据
<%=h%> 
4.4 Ejs 绑定 html 数据
<%-h%>
4.5 Ejs 模板判断语句
 <% if(true){ %> <div>true</div> <%} else{ %> <div>false</div> <%} %>
4.6 Ejs 模板中循环数据
<%for(var i=0;i<list.length;i++) { %> <li><%=list[i] %></li> 
<%}%>
4.7 == Ejs 后缀修改为 Html ==

这是一个小技巧,看着.ejs 的后缀总觉得不爽,使用如下方法,可以将模板文件的后缀换成我们习惯的.html。

  1. 在 app.js 的头上定义 ejs:,代码如下:
    var ejs = require(‘ejs’);
  2. 注册 html 模板引擎代码如下:
    app.engine(‘html’,ejs.__express);
  3. 将模板引擎换成 html 代码如下:
    app.set(‘view engine’, ‘html’);
  4. 修改模板文件的后缀为.html。
    在这里插入图片描述

五、 利用 Express. static 托管静态文件

1、如果你的静态资源存放在多个目录下面,你可以多次调用 express.static 中间件:

app.use(express.static('public'));

在这里插入图片描述
在这里插入图片描述
2、如果你希望所有通过 express.static 访问的文件都存放在一个“虚拟(virtual)”目 录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现, 如下所示:

 app.use('/public', express.static('public'));

在这里插入图片描述
现在,你就爱可以通过带有 “/public” 前缀的地址来访问 static目录下 面的文件了。

六、 Express 中间件

通俗的讲:中间件就是匹配路由之前或者匹配路由完成做的一系列的操作。中间件中如果想往下 匹配的话,那么需要写 next()
在这里插入图片描述
中间件的功能包括:

  1. 执行任何代码。
  2. 修改请求和响应对象。
  3. 终结请求-响应循环。
  4. 调用堆栈中的下一个中间件。

如果我的 get、post 回调函数中,没有 next 参数,那么就匹配上第一个路由,就不会往下匹 配了。如果想往下匹配的话,那么需要写 next()

Express 应用可使用如下几种中间件:

  1. 应用级中间件
  2. 路由级中间件
  3. 错误处理中间件
  4. 内置中间件
  5. 第三方中间件

1、应用级中间件

app.use(function(req,res,next){ /*匹配任何路由*/ //res.send('中间件'); console.log(new Date()); next(); /*表示匹配完成这个中间件以后程序继续向下执行*/ 
})
app.get('/',function(req,res){ res.send('根'); 
})app.get('/index',function(req,res){ res.send('首页'); 
})

在这里插入图片描述

2、路由中间件

app.get("/article/add", (req, res, next) => {// res.send("add添加文章")console.log("add添加文章")next()
})// 动态路由
app.get("/article/:id", (req,res) => {var id = req.params["id"]res.send("动态路由" + id)
})

在这里插入图片描述
3、错误处理中间件

app.get('/index',function(req,res){ res.send('首页'); 
})/*中间件相应 404*/ 
app.use(function(req,res){ //res.render('404',{}); res.status(404).render('404',{}); 
})

在这里插入图片描述
4、内置中间件

//静态服务 index.html app.use('/static',express.static("./static")); /*匹配所有的路径*/ app.use('/news',express.static("./static")); /*匹配所有的路径*/

5、第三方中间件
body-parser 中间件 第三方的 用来获取 post 提交的数据

  1. cnpm install body-parser --save
  2. var bodyParser = require(‘body-parser’)
  3. 设置中间件
    //处理 form 表单的中间件
    // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false }));
    form 表单提交的数据
    // parse application/json
    app.use(bodyParser.json()); 提交的 json 数据的数据
  4. req.body 获取数据

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有趣的天平秤假币问题

问题描述&#xff1a; 有12枚硬币&#xff0c;其中有一枚是假币&#xff0c;但是不知道是重还是轻。现给定一架没有砝码的天枰&#xff0c;问至少需要多少次称量才能找到这枚硬币&#xff1f;如何证明给出的方案是最少次数&#xff1f; 思路分析&#xff1a; 我们首先想到的可能…

【课程笔记】李弘毅2020 Deep Learning for Human Language Processing

简要说明 这是我在学习李弘毅老师的2020春季课程【Deep Learning for Human Language Processing】时做的课程笔记。写课程笔记的初衷是为了帮助自己之后快速的回顾复习&#xff0c;因为我记性不好&#xff0c;不做笔记的话&#xff0c;过不了1个月就忘了大半了。然后写着写着…

相邻位数字差值的绝对值不能超过_热点争议中技术问题,伺服控制有几个零点?对应真绝对值多圈编码器意义...

回归技术&#xff0c;把技术问题单独挑出来讲透&#xff0c;争要争个明白&#xff0c;看要看得明白。技术就能越辩越明。如果有“真”与“假”之争&#xff0c;沉默不去争&#xff0c;就是让“真的”受伤&#xff0c;让真心实干的人受伤。伺服控制有三个零点&#xff0c;对应三…

Chapter1-1_Speech_Recognition(Overview)

文章目录1 古人看语音辨识2 什么是语音辨识2.1 输出部分 - Token2.2 输入部分 - 声音信号特征3 数据集4 模型本文为李弘毅老师【Speech Recognition - Overview】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自…

[Swift]loadNibNamed方法

我们自定义UITableViewCell的时候&#xff0c;经常会创建一个xib文件。 &#xff08;注意&#xff1a;选择创建文件要继承于cocoa touch class&#xff0c;而不是cocoa class&#xff0c;否则你是选不了创建xib的&#xff01;&#xff01;&#xff01;&#xff09; 然后我们可以…

python做硬件自动化测试-用python做自动化测试--Python实现远程性能监控

http://blog.csdn.net/powerccna/article/details/8044222 在性能测试中&#xff0c;监控被测试服务器的性能指标是个重要的工作&#xff0c;包括CPU/Memory/IO/Network&#xff0c;但大多数人估计都是直接在被测试服务器的运行监控程序。我们开始也是这样做的。但这样做带来一…

Express Cookie 的基本使用

一、Cookie 简介 ● cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域 名的时候共享数据。 ● HTTP 是无状态协议。简单地说&#xff0c;当你浏览了一个页面&#xff0c;然后转到同一个网站的另一个页 面&#xff0c;服务器无法认识到这是同一个…

Chapter1-2_Speech_Recognition(LAS)

文章目录1 内容简述2 模型详述2.1 ListenRNN Encoder1D-CNN EncoderSelf-attentinon EncoderDown Sampling2.2 Attend2.3 Spell2.4 Beam Search2.5 Training2.6 Back to Attention本文为李弘毅老师【Speech Recognition - Listen, Attend, Spell】的课程笔记&#xff0c;课程视…

js 日期天数相加减,格式化yyyy-MM-dd

参数格式&#xff1a; date &#xff1a;2016-03-02 days&#xff1a;-3&#xff08;2&#xff09;当为负数的时候日期往前推&#xff0c;为正数&#xff0c;日期往后推 function addDate(date, days) { var d new Date(date); d.setDate(d.getDate() days); var m d.getMo…

智能车的转弯部分_江西智能搬运平板车铁路轨道运输车-厂家直销

本公司致力发展搬运设备&#xff0c;从公司成立至今一直在做电动平车的研发&#xff0c;从几十千克自动化物流车到成百上千吨都能自行研发制造&#xff0c;取得了优异的业内好评和广大消费者的肯定&#xff01; BWP型无轨平板车是一种使用特殊的行走机构&#xff0c;能够在较小…

Express Session 的基本使用

一、 Session 简单介绍 session 是另一种记录客户状态的机制&#xff0c;不同的是 Cookie 保存在客户端浏览器中&#xff0c;而 session 保存在服务器上。 Cookie 数据存放在客户的浏览器上&#xff0c;Session 数据放在服务器上。Session 相比 Cookie 要 更安全一些。由于 Ses…

Chapter1-3_Speech_Recognition(CTC, RNN-T and more)

文章目录1 CTC2 RNN-T3 Neural Transducer4 Monotonic Chunkwise Attention5 小结本文为李弘毅老师【Speech Recognition - CTC, RNN-T and more】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自于李宏毅老师的…

java商城_基于Java,jfinal web框架开发出微信商城,微信分销商城源码分享

项目简介&#xff1a;专门针对微信服务号开发的一套微信商城&#xff0c;微信分销商城&#xff0c;支持商品多规格&#xff0c;支持按地区设置邮费&#xff0c;支持限时打折&#xff0c;订单返现&#xff0c;满减送&#xff0c;满包邮&#xff0c;支持订单打印&#xff0c;订单…

Express 路由模块化以及 Express 应用程序生成器

一、 Express 路由模块化 https://expressjs.com/en/guide/routing.html Express 中允许我们通过 express.Router 创建模块化的、可挂载的路由处理程序。 1、新建一个 user.js 配置如下代码 var express require(express) var router express.Router() router.get(/, fun…

qscrollarea 设置滚动位置_爱剪辑:影视剧滚动字幕片尾,效果竟然如此高端精美...

大家好今天教大家制作滚动字幕片尾这种效果经常在影视剧和自媒体中看到不仅好看精美&#xff0c;而且还高大上快来学习吧&#xff5e;视频教程&#xff1a;爱剪辑&#xff1a;影视剧滚动字幕片尾教程https://www.zhihu.com/video/1174030334688632832移动视频的位置导入视频后&…

iOS 测试三方 KIF 的那些事

一&#xff1a; KIF 三方库的配置 今天的广州天气还不错&#xff0c;原本想试试UI测试的&#xff0c;前几天也了解到很多公司都在用 KIF 这这三方框架&#xff01;&#xff01;今天也就试着做做&#xff0c;可就跪在了这个安装上&#xff0c;我用cocopods 导入了 KIF&#xf…

Chapter1-4_Speech_Recognition(HMM)

文章目录1 HMM用在哪里2 HMM的state3 改造成DNN3.1 Tandem3.2 DNN-HMM Hybrid本文为李弘毅老师【Speech Recognition - HMM (optional)】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。其中也涉及到了部分李琳山老师关于HMM的详解&#…

Express 结合 multer 上传图片

一、 Multer 模块介绍 Multer 是一个 node.js 中间件&#xff0c;用于处理 multipart/form-data 类型的表单数据&#xff0c;它主要用 于上传文件。 它是写在 busboy 之上非常高效。 注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。 https://www.npmjs.com…

ad19pcb设置恢复默认_条码打印机-斑马产品常用恢复出厂设置

当我们手上拿到条码打印机&#xff0c;遇到一下无法挽回的时候&#xff0c;我们可以选择恢复下出厂设置&#xff0c;这样使打印机还原到出厂&#xff0c;或许是很好的选择&#xff0c;接下来我们看下斑马条码打印机操作方法如下&#xff1a;Zebra 条码打印机恢复出厂1、有面板的…

请求头和响应头

1 HTTP Request Header 请求头2 Header 解释 示例 3 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html 4 Accept-Charset 浏览器可以接受的字符编码集。 Accept-Charset: iso-8859-5 5 Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。…