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
- })
路由记录了请求和响应函数之间的映射关系.
Express中路由由三部分组成:请求方法、请求路径、对应的处理函数
app.METHOD(path,handler)
使用app对象,来监听前端HTTP请求的方法,以及路径,并执行响应的函数,来做出对应的响应
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接口回调函数的名字
我们可以通过使用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.........');
- })
在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)=>{})
在express中允许在路径部分使用路径参数:
- url/:参数
- 例如:
- app.get("/login/:id",()=>{})
-
- app.get("/login/:id?",()=>{})
代码示例:
- router.get("getproducts/:id",(req,res)=>{
- let {id}=req.params;
-
- res.send('商品');
- })
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
- // })
- })
- })