Express框架
1.Express框架
Express是一个基于Node平台的web应用开发框架,它提供了一系列的强大特性,帮助你创建各种Web应用。
1)express框架特性:
① 提供了方便简洁的路由定义方式
② 对获取HTTP请求参数进行了简化处理
③ 对模板引擎支持程度高,方便渲染动态HTML页面
④ 提供了中间件机制有效控制HTTP请求
⑤ 拥有大量第三方中间件对功能进行扩展
2)步骤:
① 使用 npm install express 下载框架
② 创建网站服务器:express框架中已经有创建网站服务器的方法,我们不
需要再使用原来引入http模块的createServer方法了;express() 就是
创建网站服务器的方法
③ 创建路由:express()方法下有 get 和 post 方法用来响应;不再使
用end 方法进行响应,使用send 方法:1.send方法内部会检测响应内容
的类型; 2.send 方法会自动设置http状态码; 3.send方法会帮我们自
动设置响应的内容类型及编码
2.中间件
中间件就是一堆方法,可以接收客户端发来的请求、可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理。
1)组成:express框架提供的用于接收请求的方法(中间件方法)和开发人员提供的用于处理请求的方法(请求处理函数)
2)一个请求可以设置多个中间件,默认情况下,请求从上到下依次匹配中间件,一旦匹配成功则终止匹配;此时,next方法可以使匹配继续,它将请求控制权交给下一个中间件,直到遇到结束请求的中间件(需要调用)
3).use中间件用法
① 接收请求,不区分请求方式,只要客户端发来请求就可以匹配到当前中间件;
② 由于中间件执行有顺序,这个中间件要定义在其他中间件前面;
③ 也可以接收某一路径的请求;第一个参数可以输入请求地址,只要走了这个请求地址就会执行
4)中间件应用
-
路由保护,客户端访问登录界面时,判断用户是否登录;如果用户未登录就会拦截,禁止进入登录页面
-
作网站维护、网页公告:放在最前面
-
自定义404页面、作访问不存在页面:需要放在最后面,status设置状态码
5)错误处理中间件
在程序执行的过程中,不可避免的会出现一些无法预料的错误,比如文件读取失败,数据库连接失败。
错误处理中间件是一个集中处理错误的地方。
Ⅰ.捕获到同步代码的错误:
app.use((err,req,res,next) => { res.status(500).send('服务器方生未知错误')};
II.异步代码错误:
需要手动触发,当程序出现错误时,调用next()方法,并且将错误信息通过参数的形式传递给next()方法,即可触发错误处理中间件。
app.get('/' , (req,res,next) => {
fs.readFile("/file-does-not-exist" , (err,data) => {
if(err) {
next(err);
}
});
});
6)捕获错误
在node.js中,异步API的错误信息都是通过回调函数获取的,支持Promise对象的异步API发生错误可以通过catch方法捕获。
try catch 可以捕获异步函数以及其他同步代码在执行过程中发生的错误,但是不能其他类型的API发生的错误。
异步函数捕获错误代码(同步异步都能获取)
① 调用 util 模块下的 promisify
② 使用 promisify方法处理 fs.readFile
③ 使用异步函数,调用 readFile 方法
④ 使用 try、catch方法捕获错误
⑤ 在catch 中使用 next 方法手动触发错误信息
3.构建模块化路由
1)步骤:
基础代码:
① 构建网站服务器、监听
② 使用 express 框架下的 Router方法创建路由对象
③ 使用 .use 为路由对象匹配请求路径
④ 创建二级路由
*模块化:把不同代码放到不同文件中,并对他们进行导出与导入
2)GET参数的获取
Express框架中,req.query 可以获取GET参数,框架内部会将GET参数转换为对象并返回。
即不再使用原来的 url模块和 req.url了。
3)POST参数的获取
Express中接收post请求参数需要借助第三方包 body-parser。
① 引入body-parser模块(返回一个对象)
② 使用app.use 拦截所有请求并使用body-parser 的urlencoded 方法:检测请求内部是否包含请求参数,如果包含会接收并将它转换为对象类型
③ 再给 req这个请求参数添加 body 属性并将请求参数作为值赋值给req.body 属性
④ 最后在请求内部调用 next 方法将请求控制权交给下一个中间件
4)app.use方法里传递函数的调用
5)Express 路由参数
这是另一种传递以及获取get参数的方法,两种方式一样重要。
可定义请求地址需要传递哪些参数
请求下的 params 属性值存储的就是路由参数对象
6)静态资源的处理
在Express下有个内置的express.static可以方便地托管静态文件,例如img、css、javascript文件等。
① 使用 .use 拦截所有请求,再用 express下的static方法进行处理
② 由于static中的参数用到的是目录,所以引进 path 模块,使用 __dirname绝对路径
③ 拼接路径