静态资源:
都写死了的资源,如 css,html
解析规则:
所有路由和中间件都在一个数组中,js 引擎会按照代码先后顺序添加路由和中间件
当请求发送到服务器时,服务器获取当前的请求信息(请求方式、请求路由路径)
遍历数组,找到第一个匹配(请求路由路径和请求方式必须完全一致)到的路由或者中间件,执行其回调函数
意味着: 声明多个同名路由时,始终解析第一个
如果没找到,返回一个状态码为 404 的响应, Cannot GET / xxx 或者 Cannot POST / xxx
中间件 middleware
当有多个路由做同一件事情,这时就会交给中间件去完成
本质上就是一个函数 (request, response, next)=>{}
express 框架 实现服务器 完全是由 路由 和 中间件 组成的
需要调用 next() 方法,才会接下来处理下面的中间件或者路由,否则卡住了
- app.use(express.static(‘./public‘)); //默认调用next
接受请求,通过分析参数,找到了 public 对应资源就返回响应
将该文件夹下所有静态资源暴露出去
例如: 文件夹有
public/index.html
public/css/index.css
就可在浏览器访问
127.0.0.1:3000/index.html
127.0.0.1:3000/css/index.css
- app.use(express.urlencoded({extended: true})); //默认调用next
解析 请求体 数据,结果数据挂载到 req.body 上
- 实例分析:
-
// 1. 导入 express 模块 const express = require(‘express‘); // 2. 创建 app 应用对象 const app = express(); // 3. 写业务逻辑:处理请求,返回响应 /**** 配置内置 中间件 (express 自带) ****/ // 将该文件夹下所有静态资源暴露出去 // 接受请求,通过分析参数,找到了 public 对应资源就返回响应 app.use(express.static(‘./public‘)); // public 下有 index.html css/index.css // 可在127.0.0.1:3000/index.html css/index.css // 解析请求体数据,结果数据挂载到 req.body 上 app.use(express.urlencoded()); // 默认调用 next() /**** 以上两个一般结合使用 ****/ // 中间件默认能接收并处理所有请求 // 需要调用 next() 方法,才会接下来处理下面的中间件或者路由,否则卡住了 app.use((request, response, next)=>{ next(); // 调用下一个中间件或者路由 }); /**************************************/ // route 路由的组成: app.请求方式(‘/路由路径‘, 句柄函数); app.get(‘/login‘, (request, response)=>{ console.log(request.body); response.send(‘Login Page Response!‘); }); app.post(‘/register‘, (request, response)=>{ console.log(request.query); response.send(‘Register Page Response!‘); }); // 4. 监听端口号:一个端口号 有且只能运行 一个程序 app.listen(3000, err=>console.log(err?err:‘服务器启动成功 : http://127.0.0.1:3000‘));
登录/注册实例
- 什么时候用 get ,什么时候用 post?
1. 凡是涉及到用户的隐私数据,就用 post
2. 其他就用 get
- 业务逻辑
1. 导入 exoress 框架
2. 注册路由
由于默认访问不到静态资源,所以1引入中间件,暴露静态资源
默认不能解析 请求体 ,则2引入中间件,解析 请求体 数据(优先级低于上一中间件,避免多余分析)
① 获取用户提交的表单数据 req.body
② 对数据库进行正则验证(验证数据的规范)
③ 检查用户名是否存在
连接数据库
User.findOne();
④ 保存在数据库中
User.create();
⑤ 无论 失败/成功 都要返回
3. 登录路由
4. 设置端口号,启动服务器监听
- 项目目录
/public/register.html
/public/login.html
app.js
原文地址:https://www.cnblogs.com/tianxiaxuange/p/10157205.html