【Node.js】初见Express框架
Express框架
一、基本概念
01.是什么
- Express是一个基于Node平台的web应用开发框架
- 它提供了一系列的强大特性,帮助你创建各种Web应用我们
- 可以使用
npm install express
命令进行下载
02.特性
03.下载
npm install express
04.引用
const express = require("express");
05.创建网站服务器
06.创建路由
-
创建路由以响应客户端请求,与
router
模块使用类似app.get("/", (req,res) =>{ res.send(); });
注意,不再使用
end()
方法进行响应,而是send()
send()
方法:
二、中间件
01.基本概念
-
概念:
-
组成:
中间件主要由两部分构成:
-
处理:
02.app.use
中间件
-
app.use
匹配所有的请求方式,可以直接传入请求处理函数,代表接收所有的请求因为中间件按顺序执行,所以该中间件要放在最前面
app.use( (req,res,next)=>{ next(); } );
-
app.use
第一个参数可以传入请求地址- 代表不论什么请求方式,只要是这个请求地址就接收这个请求
app.use("/list",(req,res,next)=>{ next(); });
03.中间件应用
-
路由保护
-
网站维护公告
在所有路由的最上面定义接收所有请求的中间件,
直接为客户端做出响应,网站正在维护中
res.send();
-
自定义404
res.status(404).send("。。。");
04.错误处理中间件
-
在程序执行的过程中,不可避免的会出现一些无法预料的错误
app.get( ()=>{ throw new Error("程序错误"); });
app.use( (err,req,res,next)=>{ res.status(500).send(err.message); } );
-
异步错误的处理:手动触发
当程序出现错误时,调用
next()
方法,并且将错误信息通过参数的形式传递给**next()
方法**,即可触发错误处理中间件app.get((req,res,next)=>{ fs.readFile(" ", (err,data)=>{ if(err){ next(err); } }); });
05.捕获错误
在
node.js
中,异步API的错误信息可以通过回调函数获取支持
Promise
对象的异步API发生错误,可以通过catch()
方法捕获
-
try catch
可以捕获异步函数以及其他同步代码在执行过程中发生的错误,但是不能其他类型的异步错误app.get("", async ()=>{ try{ await 可能出现错误的代码 }catch(ex){ next(ex); } });
三、构建模块化路由
01.构建模块化路由的基础代码
-
创建路由对象
const home = express.Router();
-
将路由和请求路径进行匹配
app.use("/home",home);
在客户端请求这个路径"/home"时,用home路由进行这个处理
-
在
home
路由下继续创建路由(二级路由)home.get("/index", ()=>{ res.send(); });
这是home路由下的处理
当用户访问/home时,进入home路由,然后在/home路径下访问/index路径时,就进行home路由里面的处理,
即实际客户端访问:localhost:3000/home/index时,才会进入这个路由
-
导出
home
路由module.exports = home;
四、Express请求处理
01.GET参数的获取
-
Express框架中使用
req.query
即可获取GET参数- 框架内部会将GET参数转换为对象并返回
- 地址栏中问号后面的参数
app.get("/",(req,res)=>{ console.log(req.query); });
02.POST参数的获取
-
Express中接收POST请求参数需要借助第三方包
body-parser
const bodyParser = require("body-parser"); app.use(bodyParser.urlencoded({ extended:false })); app.post("/", (req,res)=>{ console.log(req.body); });
bodyParser.urlencoded
这个方法对请求进行处理,如果含有参数,就将参数转换为对象类型
03.Express路由参数
-
语法示例
app.get("./find/:id",(req,res)=>{ req.params });
如:请求地址:
localhost:3000/find/123456
则,req.params = { “id”: “123456” };
-
可以拼接多个
app.get("./find/:id/:name/:age",(req,res)=>{ req.params }); localhost:3000/find/123456/ccc/234
-
04.静态资源的处理
模板页面需要静态资源的处理
这是因为模板中的相对路径,实际是相对于浏览器地址栏中的请求路径
并不是相对于模板所在路径
app.use( express.static("public") );
五、模板引擎
01.express-art-template模板引擎
为了使 art-template模板引擎能够更好的和 Express框架配合,模板引擎官方在原
art-template
模板引擎的基础上封装了express-art-template
-
需要同时下载两个模块
npm install art-template express-art-template
-
语法示例
// 配置:在渲染art模板时,使用express-art-template模块 app.engine("art",require("express-art-template")); // 设置模板存放目录 app.set("views", path.join(__dirname,"views")); // 设置模板的默认后缀,默认拼接.art后缀 app.set("view engine", "art"); app.get("/", (req,res)=>{ // 渲染模板:模板名称+对象数据 // 会将结果直接响应给客户端 res.render("index"); })
当请求地址是"/“时,就渲染”/index"到页面中
02.app.locals对象
-
变量设置到
app.locals
对象下面,这个数据在所有的模板中都可以获取到 -
语法示例
app.locals.users = [{...}];
在模板中可以直接使用模板语法以导入数据,不需要再次请求数据
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。