总结以上代码:
-
引入express框架模块
-
send 方法相较于 nodejs 原生的 end 方法更加强大 不同设置相应有的 content-tye
-
此方法会自动根据返回的数据设置相应的响应头
- 中间件就是以对方法,可以接受客户端发来的请求,可以对请求作出响应,
- 也可以将请求继续交给下一 个中间件继续处理
- 登录就可以使用中间件进行拦截处理
概念:
- 中间件主要由两部分组成:中间件方法以及请求处理函数
- 中间件方法由express提供,负责拦截请求,请求处理函数由开发人员提供,负责处理请求
- 其实路由就是中间件
app.get(‘/’, (req, res) => {
res.send(‘
hello,express
’) // 输出html文本})
//匹配以get方式请求的/路由
中间件——app.use
这里以 app.use 中间件为例,讲解中间件的用法
-
app.use 匹配所有请求方式和请求路径,可以直接传入请求处理函数
-
app.use 第一个参数可以传入请求地址,代表无论什么请求方式,只要请求的是这个地址就接收这 个请求
基本用法:
const express = require(‘express’)
const app = express()
app.use((req, res) => {
res.send(‘你不错!’)
})
app.get(‘/’, (req, res) => {
res.send(‘我是主页’)
})
app.get(‘/new’, (req, res) => {
res.send(‘我是添加’)
})
app.listen(3000, () => {
console.log(‘Server is running at http://127.0.0.1:3000’)
})
- app.use会接收所有传递方式中的所有路由 导致后面的路由不会继续匹配
next的用法
默认情况下,如果前面的路由已经匹配上,如果后面还有中间件,则不会执行,需要使用 next ,才会 向后执行
路由的保护
客户端在访问需要登录的页面时,可以先使用中间件判断用户登录状态,用户如果未登 录,则拦截请求,直接响应,禁止用户访问需要登录的页面
- 如果用户未登录
- 如果用户已经登录
网站维护公告
在所有路由的最上面定义接收所有请求的中间件,直接为客户端作出响应,网站正 在维护中
自定义404(当用户输入与路由不匹配网址时)
const express = require(‘express’)
const app = express()
app.get(‘/’, (req, res) => {
res.send(‘我是主页’)
})
app.get(‘/new’, (req, res) => {
res.send(‘我是添加’)
})
//当用户访问地址与以上路由均不匹配时 进入下面的路由 因为下面会匹配任何路由
app.use((req, res, next) => {
res.status(404).send(‘你访问的地址不存在’)
})
app.listen(3000, () => {
console.log(‘Server is running at http://127.0.0.1:3000’)
})
程序中有两类错误
-
代码错误,这个在开发调试阶段就可以解决掉
-
运行时错误:程序运行时才可能出现的错误,如读取的文件不存在,连接数据库时数据库服务没有 启动,这类错误的发生与我们的代码没有关系
同步错误处理
同步错误发生后,错误处理能够自动捕捉
下面手动的制造一个错误并抛出,错误处理能够获取错误信息
总结上面代码:
不仅仅局限于手动抛出的错误 错误中间件才能够捕获 还包括同步中的调用未定义的方法 含有语法错误的对象 解析json字符串的错误
异步错误
异步错误发生后,错误处理中间件无法自动捕捉:使用next执行错误处理
例如:读取不存在的文件错误