Express框架学习

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案例
// 引入express框架
const express = require('express');
// 创建网站服务器
const app = express();

// 接收所有请求的中间件
app.use((req, res, next) => {
	console.log('请求走了app.use中间件');
	next()
})

// 当客户端访问/request请求的时候走当前中间件
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.构建模块化路由
  • home.js
const express = require('express');

const home = express.Router();

home.get('/index', (req, res) => {
	res.send('欢迎来到博客首页')
})

module.exports = home;
  • admin.js
const express = require('express');

const admin = express.Router();

admin.get('/index', (req, res) => {
	res.send('欢迎来到博客管理页面')
})

module.exports = admin;
  • app.js
// 引入express框架
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) => {
	//获取get请求参数
	res.send(req.query)
})
3.post参数的获取
  • express中接受post请求参数需要借助第三方包 body-parser
// 引入express框架
const express = require('express');
const bodyParser = require('body-parser');
// 创建网站服务器
const app = express();
// 拦截所有请求
// extended: false 方法内部使用querystring模块处理请求参数的格式
// extended: true 方法内部使用第三方模块qs处理请求参数的格式
app.use(bodyParser.urlencoded({extended:false}))

app.post('/add', (req, res) => {
	//接受post请求参数
	res.send(req.body);
})

// 端口监听
app.listen(3000);
4.Express路由参数
  • 让请求地址看起来更加美观,路由代码更易阅读
app.get('/index/:id/:name/:age', (req, res) => {
	// 接收post请求参数
	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();

// 1.告诉express框架使用什么模板引擎渲染什么后缀的模板文件
//  1.模板后缀
//  2.使用的模板引擎
app.engine('art', require('express-art-template'))
// 2.告诉express框架模板存放的位置是什么
app.set('views', path.join(__dirname, 'views'))
// 3.告诉express框架模板的默认后缀是什么
app.set('view engine', 'art');

app.get('/index', (req, res) => {
	// 1. 拼接模板路径
	// 2. 拼接模板后缀
	// 3. 哪一个模板和哪一个数据进行拼接
	// 4. 将拼接结果响应给了客户端
	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);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值