Web前端105天-day33-Node.js

node.jsday05

目录

前言

一、复习

二、路由器

三、中间件(插件)

3.1应用级中间件

3.2路由级中间件

3.3内置中间件

3.4第三方中间件

3.5错误处理中间件

总结


前言

node.jsday05学习开始。


一、复习

二、路由器

  •  用来管理路由,包含多个路由
1.路由器
//(1)引入express模块
//(2)创建路由器对象
const router = express.Router()
//(3)往路由器对象添加路由
//(4)暴露路由器对象
module.exports = router
2.WEB服务器
//(1)引入路由器模块
//(2)挂载引入的路由器
app.use( URL前缀, 路由器  )

  •  练习:创建用户路由器模块user.js,创建路由器对象,添加用户列表的路由(get /list),暴露路由器对象;在WEB服务器app.js下,引入用户路由器,挂载路由器,添加URL前缀 /user
文件目录结构标题

 

// user.js

// 引入express模块
const express = require('express')
// 创建路由器的对象
const router = express.Router()
// 添加路由
// 用户列表(get /list)
router.get('/list',(req,res)=>{
	res.send('这是用户列表')
})
// 暴露路由器对象
module.exports = router
// app.js

// 引入express模块
const express = require('express')
// 引入商品路由器模块
const pr = require('./product')
// 引入用户路由器模块
const ur = require('./user')
// 创建WEB服务器
const app = express()
// 设置端口
app.listen(3000)
// 挂载路由器在WEB服务器
// 还可以给所有所有的路由添加前缀 /product
//  /product/list
app.use( '/product',pr )
// 挂载用户路由器,添加前缀/user
// /user/list
app.use( '/user',ur )


// 添加路由
// 商品列表(get /list)
app.get('/list',(req,res)=>{
	res.send('这是商品列表')
})
// 用户列表(get /list)
app.get('/list',(req,res)=>{
	res.send('这是用户列表')
})

// product.js

// 引入express模块
const express = require('express')
// 创建路由器对象
const router=express.Router()
// 往路由器下添加路由
// 商品列表(get /list)
router.get('/list',(req,res)=>{
	res.send('这是商品列表')
})
// 将暴露路由器对象出去
module.exports = router

三、中间件(插件)

  • 用来拦截对WEB服务器的请求,中间件分为应用级中间件、路由级中间件、内置中间件、第三方中间件、错误处理中间件

3.1应用级中间件

  • 是一个函数,一旦拦截到以后会自动调用这个函数

function fn(req,res,next){
   next()   往后执行,可能是下一个中间件或者路由
}
app.use( 拦截的URL, fn )
注意事项:如果拦截的URL为空,表示拦截所有的请求。
  • 练习:编写文件03_middleware.js,使用express创建WEB服务器,添加路由(get  /list),响应'这是所有的用户列表,只有管理员有权限查看'

// 引入express模块
const express = require('express')
// 创建WEB服务器
const app = express()
// 设置端口
app.listen(3000)
function fn(req,res,next){
	// console.log('拦截了对/list的请求')
	// 获取get传递的参数
	var obj = req.query
	console.log(obj)
	// 验证用户名是否为管理员root
	// 如果不是管理员root,响应'提供管理员账户'
	if( obj.user!=='root' ){
		res.send('请提供管理员账号')
	}else{
		// 否则是管理员,才允许继续往后执行
		// 可能是下一个中间件,或者路由
		next()
	}
}
// 添加中间件,拦截对/list的请求
app.use('/list',fn)
// 添加路由(get /list)
app.get('/list',(req,res)=>{
	res.send('这是所用用户列表!只有管理员有权限查看')
})
// 添加中间件,拦截删除用户路由,验证用户身份是否为管理员
app.use('/delete',fn)
// 添加删除用户的路由(get /delete),响应'删除成功'
app.get('/delete',(req,res)=>{
	res.send('删除成功')
})

function discount(req,res,next){
	console.log('拦截了对/shopping的请求')
	// 获取get传递的参数
	console.log(req.query)
	// 打9折        
	req.query.price *= 0.9
	// 往后执行
	next()
}
// 添加中间件,拦截对/shopping的请求
app.use('/shopping',discount)
// 添加路由(get /shopping)
app.get('/shopping',(req,res,next)=>{
	// 获取get传递的参数
	var obj = req.query
	console.log(obj)
	res.send('商品的价格:' + obj.price)
	// 往后执行
	next()
})
// 后置中间件
app.use((req,res)=>{
	console.log('这是一个后置中间件')
})

3.2路由级中间件

  • 就是路由器的使用,当拦截到URL以后,到指定的路由器下查找路由

  • app.use( 拦截的URL, 路由器 )

3.3内置中间件

  • express提供的中间件,就是内置中间件
  • 将post传参转为对象
  • 托管静态资源
    • 静态资源:固定的文件,每次请求这个文件,响应的结果是固定的,例如:html,css,js,图片,视频,声音,...

    • 动态资源:数据库的数据,每次传递的参数不同,响应的结果也不同,例如:请求获取一个员工资源,传递的编号不同,响应的结果也不同

  •  托管静态资源:客户端如果要请求静态资源,不需要通过路由去响应文件,服务器把静态资源放入到一个指定的目录下,让客户端自动去查找。

    • app.use( express.static('托管的目录') )

  • 练习:编写文件05_ex.js,创建WEB服务器,设置端口;托管静态资源到public目录下,包含文件login.html,点击提交向服务器发请求(post  /mylogin),响应'登录成功!欢迎xxx'

 

<!-- login.html -->

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>用户登录</title>
	</head>
	<body>
		<h1>用户登录</h1>
		<form action="/user/mylogin" method="post">
			用户<input type="text" name="user"><br>
			密码<input type="password" name="pwd"><br>
			<button>登录</button>
		</form>
	</body>
</html>
// 引入express模块
const express = require('express')
// 引入路由器模块
const ur = require('./05_user')
// 创建WEB服务器
const app = express()
// 设置端口
app.listen(3000)
// 托管静态资源到public目录
app.use( express.static('public') )
// 将post传参转为对象
app.use( express.urlencoded({
	extended: true
}) )
// 练习:编写用户路由器05_user.js,创建路由器对象,将用户登录的路由添加到该路由器下,暴露路由器对象
// 练习:在WEB服务器下引入用户路由器,挂载路由器,并添加前缀/user
// /user/mylogin
app.use( '/user',ur )

3.4第三方中间件

  • 都是以第三方模块的形式出现,需要先去下载安装

3.5错误处理中间件


总结

node.jsday05学习完成

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值