目录
介绍
xpress 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架,官方网址:https://www.expressjs. com.cn/
简单来说,express 是一个封装好的工具包,封装了很多功能
使用
初体验
//导入express
const express = require('express')
//创建应用对象
const app = express()
//创建路由规则
app.get('/home', (req, res) => {
res.end('hello express server')
})
//监听端口,启动服务
app.listen(3000, () => {
console.log('服务启动成功');
})
路由
官方定义: 路由确定了应用程序如何响应客户端对特定端点的请求
//导入express
const express = require('express')
//创建应用对象
const app = express()
// 路由类似服务员---根据你的类型告诉你去哪
//创建get 路由
app.get('/', (req, res) => {
res.send('网站首页')
})
//创建post路由
app.post('/login', (req, res) => {
res.end('login login ')
})
//匹配所有的请求方法
app.all('/search', (req, res) => {
res.end('1 秒钟为您找到相关结果约 100, 000, 000 个')
})
//自定义404路由
app.all('*', (req, res) => {
res.send('<h1>404 NOT FOUND</h1>')
})
//监听端口,启动服务
app.listen(3000, () => {
console.log('success');
})
获取请求参数
//导入express
const express = require('express')
//创建应用对象
const app = express();
//获取请求的路由规则
app.get('/request', (req, res) => {
//1.与原生的http方式兼容
console.log(req.method);
console.log(req.url);
console.log(req.httpVersion);
console.log(req.headers);
//2.express 独有的获取报文的方式
//2.1 获取查询字符串
console.log(req.query);
//2.2 获取指定的请求头
console.log(req.get('host'));
res.send('请求报文的获取')
})
// //获取路由参数----URL路径中的参数(数据)
// app.get('/:id.html', (req, res) => {
// res.send('商品详情,商品id为', req.params.id);
// })
//监听端口,启动服务
app.listen(3000, () => {
console.log('启动成功');
})
express 响应设置
//导入express
const express = require('express')
//创建应用对象
const app = express();
//获取请求的路由规则
app.get('/response', (req, res) => {
//1.express 中设置响应的方式兼容http模块的方式
res.statusCode = 404
res.statusMessage = 'xxx'
res.setHeader('abc', 'xyz')
res.write('响应体')
res.end('xxx')
//2.express 的响应方法
res.status(500)//设置响应状态码
res.set('xxx', 'yyy')//设置响应头
res.send('中文响应不乱码')//设置响应体
//连贯操作
res.status(404).set('xxx', 'yyy').send('你好朋友')
//3.其他响应
res.redirect('http://atguigu.com')//重定向
res.download('./package.json')//下载响应
res.json()//响应json
res.sendFile(__dirname + '/home.html')//响应文件内容
})
express中间件
什么是中间件
中间件(Middleware)本质是一个回调函数 中间件函数 可以像路由回调一样访问 请求对象(request) , 响应对象(response)
中间件的作用
中间件的作用 就是 使用函数封装公共操作,简化代码
中间件的类型
全局中间件------定义全局中间件 每一个请求 到达服务端之后 都会执行全局中间件函数
//导入express
const express = require('express')
const fs = require('fs')
const path = require('path')
//创建应用对象
const app = express()
//声明中间件函数
function recordMiddleleweare(req, res, next) {
//获取url ip
let { url, ip } = req
//将信息保存
fs.appendFileSync(path.resolve(__dirname, './access.log'), `${url} ${ip}\r\n`)
//调用next
next()
}
//调用中间件函数
app.use(recordMiddleleweare)
//创建路由
app.get('/home', (req, res) => {
res.send('front page')
})
app.get('/admin', (req, res) => {
res.send('back page')
})
app.all('*', (req, res) => {
res.send('<h1>404 Not Found</h1>')
})
//监听端口,启动服务、
app.listen(3000, () => {
console.log('sucecess');
})
路由中间件
//导入express
const express = require('express')
//创建应用对象
const app = express()
//创建中间件函数
let middle = (req, res, next) => {
if (req.query.code === '521') {
next()
} else {
res.send('failure')
}
}
//创建路由
app.get('/home', (req, res) => {
res.send('front page')
})
app.get('/admin', middle, (req, res) => {
res.send('back page')
})
app.get('/setting', middle, (req, res) => {
res.send('setting page')
})
app.all('*', (req, res) => {
res.send('<h1>404 Not Found</h1>')
})
//监听端口,启动服务
app.listen(3000, () => {
console.log('success');
})
Rooter
什么是 Router
express 中的 Router 是一个完整的中间件和路由系统,可以看做是一个小型的 app 对象
Router 作用
对路由进行模块化,更好的管理路由
Router 使用
创建独立的 JS 文件(homeRouter.js)
//导入express
const express = require('express')
//创建路由器对象
const router = express.Router();
//在router身上添加路由
router.get('/', (req, res) => {
res.send('首页')
})
router.get('/cart', (req, res) => {
res.send('购物车')
})
//暴露
module.exports = router
主文件
//路由的模块化练习
const express = require('express')
const app = express()
//引入子路由文件
const homeRouter = require('./06homeRouter')
//设置使用中间件
app.use(homeRouter)
//监听端口启动服务
app.listen(3000, () => {
console.log('success');
})
EJS模板引擎
模板引擎是分离 用户界面和业务数据 的一种技术
(分离html 与 js )
什么是 EJS
EJS 是一个高效的 Javascript 的模板引擎
官网: https://ejs.co/ 中文站:https://ejs.bootcss.com/