1. Express框架简介
1.Express框架是什么
- Experss是一个基于Node平台的web应用开发框架,用于创建web应用
- 使用 npm install express 命令进行下载
2.Express框架特性
- 提供简洁的路由定义方式
- 对获取HTTP请求参数进行了简化
- 对模板引擎支持度高,方便渲染动态HTML页面
- 提供了中间件机制有效控制HTTP请求
- 拥有大量第三方中间件对功能进行扩展
2. Express框架中间件
1.什么是中间件
- 中间件就是一堆方法,可以接收请求作出响应等
- 组成:中间件方法以及请求处理函数
2.app.use中间件用法
- app.use 匹配所有的请求方式,可以直接传入请求函数,代表接受所有的请求
- app.use 第一个参数也可以传入请求地址,代表不论什么请求方式,只要是这个请求地址就接受请求
app.use('/admin',(req,res,next)=>{
console.log(req.url);
next();
})
app.use案例
const express = require('express');
const app = express();
app.use((req, res, next) => {
console.log('请求走了app.use中间件');
next()
})
app.use('/request', (req, res, next) => {
console.log('请求走了app.use / request中间件')
next()
})
app.get('/list', (req, res) => {
res.send('/list')
})
app.get('/request', (req, res, next) => {
req.name = "张三";
next();
})
app.get('/request', (req, res) => {
res.send(req.name)
})
app.listen(3000);
console.log('网站服务器启动成功');
3.中间件应用
app.use('/admin', (req, res, next) => {
let isLogin = true;
if (isLogin) {
next();
} else {
res.send('您还未登陆,请登录')
}
})
app.get('/admin', (req, res) => {
res.send('您已登录 可以访问当前页面')
})
- 网站维护公告,在所有路由最上面定义接收所有请求的中间件,直接为客户端作出访问,网站正在维护中
app.use((req, res, next) => {
res.send('当前网站正在维护...')
})
- 自定义404页面 res.status(404);修改状态码为404
app.use((req, res, next) => {
res.status(404);
res.send('当前访问页面不存在')
})
4.错误处理中间件
app.use((err,req,res,next)=>{
res.staus(500).send('err.message//输出错误信息')
})
5.捕获错误
- try catch 可以捕获异步函数以及其他同步代码在执行过程中发生的错误,但是不能其他类型的API发生的错误
app.get('/index', async (req, res, next) => {
try {
await readFile('./aaa.js')
} catch (ex) {
next(ex);
}
})
3.Express请求处理
1.构建模块化路由
const express = require('express');
const home = express.Router();
home.get('/index', (req, res) => {
res.send('欢迎来到博客首页')
})
module.exports = home;
const express = require('express');
const admin = express.Router();
admin.get('/index', (req, res) => {
res.send('欢迎来到博客管理页面')
})
module.exports = admin;
const express = require('express');
const app = express();
const home = require('./route/home');
const admin = require('./route/admin');
app.use('/home', home);
app.use('/admin', admin);
app.listen(3000);
2.get参数的获取
- 框架中使用req.query即可获取get参数,框架内部会将get参数转为对象并返回
app.get('/index', (req, res) => {
res.send(req.query)
})
3.post参数的获取
- express中接受post请求参数需要借助第三方包 body-parser
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({extended:false}))
app.post('/add', (req, res) => {
res.send(req.body);
})
app.listen(3000);
4.Express路由参数
app.get('/index/:id/:name/:age', (req, res) => {
res.send(req.params)
})
5.静态资源的处理
- 框架内置express.static可以方便地托管静态文件,例如img scc js文件等
app.use('/static',express.static(path.join(__dirname,'public')))
4.express-art-template模板引擎
- 使用npm install art-template express-art-template 命令进行安装
const express = require('express');
const path = require('path');
const app = express();
app.engine('art', require('express-art-template'))
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'art');
app.get('/index', (req, res) => {
res.render('index', {
msg: 'message'
})
});
app.get('/list', (req, res) => {
res.render('list', {
msg: 'list page'
})
})
app.listen(3000);
- app.locals 对象
- 将变量设置到app.locals对象下,这个数据在所有的模板中都可以取到
const express = require('express');
const path = require('path');
const app = express();
app.engine('art', require('express-art-template'))
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'art');
app.locals.users = [{
name: 'zhangsan',
age: 20
},{
name: '李四',
age: 30
}]
app.get('/index', (req, res) => {
res.render('index', {
msg: '首页'
})
});
app.get('/list', (req, res) => {
res.render('list', {
msg: '列表页'
});
})
app.listen(3000);