Express是基于基于 Nodejs平台,快速、开放、极简的 Web 开发框架
官网地址:Express - 基于 Node.js 平台的 web 应用开发框架 - Express 中文文档 | Express 中文网
express的学习重点:路由和中间件
一、简介
使用Express可以大大简化web服务器的开发。
二、安装
Express是一个第三方的框架
npm install express --save
基础运用:
//配置路由列表
cosnt express=require('express');
const app=express();
//处理逻辑
app.get("/",(req,res)=>{
})
//...
app.listen(3000,()=>{
//callback
})
三、路由
路由记录了请求和响应函数之间的映射关系.
1.路由概述
Express中路由由三部分组成:请求方法、请求路径、对应的处理函数
app.METHOD(path,handler)
2.app级路由
使用app对象,来监听前端HTTP请求的方法,以及路径,并执行响应的函数,来做出对应的响应
2.1 app级路由常用方法
-
get() 响应GET请求
-
post() 响应post请求
-
delete()
-
all() 响应所有的http请求
-
use(path,handler) 响应所有HTTP支持的请求方式,
-
path 路径 根路径
-
示例: /demo 可以匹配所有以/demo为一级路由的路径
-
-
-
set(key,value) 对app级路由添加设置
代码示例:
app.get('/',(req,res)=>{})
app.post('/',(req,res)=>{})
app.delete('/',(req,res)=>{})
app.all('/',(req,res)=>{})
app.use('/',(req,res)=>{})
app.set("jsonp callback name","cb");//设置jsonp接口回调函数的名字
3.router级路由
我们可以通过使用express.Router()级路由来实现模块化。
使用步骤:
-
在模块文件中引入express.Router() ----> 挂载路由 -------> 导出路由
-
在入口文件中,使用app.use() 集成路由
代码示例:
user模块
///个人中心模块
const express=require("express");
let router=express.Router()
// 个人中心模块
//模块中配置的路由: 从二级路由开始
// /user/list
router.get('/list',(req,res)=>{
res.send("list")
})
router.post("/login", (req, res) => {
res.send("登录")
})
router.post("/reg", (req, res) => {
res.send("注册")
})
router.post("/uploadHeader", (req, res) => {
res.send("上传头像")
})
router.post("/mfTels", (req, res) => {
res.send("修改手机号")
})
router.post("/mfPwd", (req, res) => {
res.send("修改密码")
})
//.....
module.exports=router
入口文件:
app.js
const app = require('express')();
// const app1=require("./category")
const cateRouter=require("./category");//导入自定义的路由模块
const userRoueter=require("./user");//导入自定义的路由模块
//使用路由模块
//use的第一个参数可以不传,默认值: /
// app.use("/",router)
//等价于下面代码
// app.use(cateRouter)
app.use('/cate',cateRouter) //分类
app.use('/user',userRoueter)//个人中心
//..
app.get('/',(req,res)=>{
res.send("index")
})
app.listen(3000, () => {
console.log('running.........');
})
4. 路径正则
在Express中,路径允许使用正则
? 0个或一个
+ 一个或多个
* 任意多个任意字符
. 任意字符(除了换行、终止符)
()
$ 结尾
代码示例:
// /acd /abcd
app.get("/ab?cd",(req,res)=>{})
// abcd /abbcd
app.get('/ab+cd',(req,res)=>{})
// /abcd /abbcd /abmmcd
app.get('/ab*cd',(req,res)=>{})
// /ad /abcd
app.get('/a(bc)?d',(req,res)=>{})
// 必须以cd结尾
app.get('/ab*cd$',(req,res)=>{})
5. 动态路由(路由参数)
在express中允许在路径部分使用路径参数:
url/:参数
例如:
app.get("/login/:id",()=>{})
app.get("/login/:id?",()=>{})
代码示例:
router.get("getproducts/:id",(req,res)=>{
let {id}=req.params;
res.send('商品');
})
6. get和post参数
-
get查询参数在query取
-
get中路径参数在params
-
post参数监听data和end事件
代码示例:
//post案例
app.post("/products", (req, res) => {
// console.log(req.query);
// console.log(req.params);
let arr = []
req.on('data', chunk => {
arr.push(chunk)
})
req.on('end', () => {
console.log(Buffer.concat(arr).toString())
// let buf=Buffer.concat(arr);
// buf.toString()
res.header("Access-Control-Allow-Origin", "*")
res.send("hello")
// res.send({
// code: 200,
// msg: "商品数据",
// data: products
// })
})
})