目录
http模块
框架
express 框架
创建web服务器
路由
params传递
路由器
?web服务器
中间件
应用级中间件
路由级中间件
内置中间件
?
http模块
- req.url? ? ? ? 获取请求的资源,
- req.method? ? ? ? 获取请求的方法
框架
一套解决方案,
express 框架
Express - 基于 Node.js 平台的 web 应用开发框架 - Express 中文文档 | Express 中文网
属于第三方模块,需要下载安装
npm install express
创建web服务器
// 引入express模块
const express = require("express");
// console.log(express);
// 创建web服务器
const app = express();
// 设置端口
app.listen(3000, () => {
console.log("服务器启动成功");
});
路由
监听特定的请求,组成,请求的URL,请求的方法,回调函数
- res.send()设置响应内容并发送
- res.redirect()设置响应的重定向,跳转另一个URL
- res.sendFile(__dirname+'/path')响应一个文件,路径必须使用绝对路径
params传递
// 引入express模块
const express = require("express");
// 创建web服务器
const app = express();
// 设置端口
app.listen(3000);
//添加路由,
//params传参需要在路由中设置参数名
app.get("/search/:wd", (req, res) => {
// 获取params传递的参数
var obj = req.params;
res.send("搜索成功"+obj.wd);
console.log(obj);
});
路由器
1.路由器
//(1)引入express模块
//(2)创建路由器对象
const router = express.Router()
//(3)往路由器对象添加路由
//(4)暴露路由器对象
module.exports = router
?web服务器
//(1)引入路由器模块
//(2)挂载引入的路由器
app.use( URL前缀, 路由器 )
?
中间件
用来拦截对web服务器的请求,中间件分为应用级中间件,路由级中间件,内置中间件,第三方中间件,错误处理中间件
应用级中间件
一个函数,一旦拦截到以后会自动调用这个函数
// 引入express模块
const express = require('express')
const app = express()
app.listen(3000)
function fn(req, res, next) {
console.log('拦截了对/list请求');
var obj = req.query
console.log(obj);
if (obj.user !== 'root') {
res.send('请提供管理员账号')
} else {
// 否则是管理员,允许继续执行
next()
}
}
// 添加中间件,拦截/list的请求
app.use('/list', fn)
app.use('/delete', fn)
app.get('/list', (req, res) => {
res.send('这是所有用户列表,只有管理员权限')
})
// 添加中间件,拦截删除用户路由,验证用户身份是否为管理员
// 添加删除用户的路由(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()
}
app.use('/shopping', discount)
// 添加路由(get /shopping)
app.get('/shopping', (req, res, next) => {
var obj = req.query
console.log(obj);
res.send('商品的价格:' + obj.price)
// 往后执行
next()
})
// 后置中间件
app.use((req, res) => {
console.log('后置中间件');
})
路由级中间件
当拦截到URL以后,到指定的路由器下查找路由
app.use(拦截的URL,路由器)
内置中间件
express提供的中间件,就是内置中间件
将post传参转为对象
托管静态资源,客户端如果要请求静态资源,不需要通过路由去响应文件,服务器把静态资源放入到一个指定的目录下,让客户端自动去查找
app.use(express.static(‘托管的目录’))
// 引入express模块
const express = require('express')
// 创建web服务器
const app = express()
// 引入用户登录路由器模块
const ur = require("./05_user");
// 设置端口
app.listen(3000)
// 托管静态资源
app.use(express.static('public'))
// 将post传递的参数转换为中间件
app.use(express.urlencoded({
extended: true
}))
// 编写用户路由器,创建路由器对象,将用户登录的路由添加到该路由器下,暴露路由器对象
// 在web服务器下引入用户路由器,挂在路由器,并添加前缀/user
// /user/mylogin
// 挂载路由器
// 路由添加前缀 /user/mylogin
app.use("/user", ur);
// 引入express模块
const express = require("express");
// 创建路由器对象
const router = express.Router();
// // 路由器添加路由
// // 商品列表(get / list)
// router.get("/mylogin", (req, res) => {
// res.send("这是商品列表");
// });
// 添加路由,监听按钮提交的请求
router.post('/mylogin', (req, res) => {
// 获取post传递的参数
var obj = req.body
res.send(`登陆成功!欢迎:${obj.user}`)
})
// 将路由器对象暴露出去
module.exports = router;
|