node知识点总结(八)

96 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情

前言

大家好呀,我是L同学。在上篇文章node知识点总结(七)中,我们学习了node相关知识点,包括express介绍、如何安装express、使用Express构造Web服务器、get接口等相关知识点。今天,在这篇文章中,我们来学习node的其他知识点,包括接收post请求体、开放静态资源、路由、MySql等相关知识点。

接收post请求体

  • POST请求体的类型(Content-Type)

    • application/x-www-form-urlencoded 比如:id=1&name=zs&age=20
    • form-data 比如,提交的是FormData对象
    • application/json 比如,提交的是 {"id": 1, "name": "zs", "age": 20}
    • 其他...
  • 服务器端接收不同类型的请求体,使用的方式是不同的

    • urlencoded ---> app.use(express.urlencoded({extended: false}));
    • application/json ---> app.use(express.json());
    • form-data ---> 服务器端使用第三方模块处理(multer

开放静态资源

  • 什么叫做静态资源

    • css文件
    • 图片文件
    • js文件
    • 等等
  • 什么叫做开放静态资源

    • 开放,即允许客户端来访问
  • 具体做法

    • 比如,允许客户端访问public文件夹里面的文件
    • app.use(express.static('public'))

路由

广义上来讲,路由就是映射关系。在程序中的路径也是映射关系。在 Express 中,路由指的是客户端的请求与服务器处理函数之间的映射关系。 Express 中的路由分 3 部分组成,分别是请求的类型、请求的 URL 地址、处理函数,格式如下。

// 路径 ,就是我们之前说的接口的处理程序
app.get('/api/getbooks', (req, res) => {
    
});

app.post('/api/getbooks', (req, res) => {
    
});

app.post('/api/addbook', (req, res) => {
    
});

每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数。在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的 URL 同时匹配成功,则 Express 会将这次请求,转交给对应的 function 函数进行处理。

模块化路由

  1. 创建路由模块对应的 .js 文件

    (1) 创建router/login.js 存放 登录、注册、验证码三个路由

    (2) 创建router/heroes.js 存放 和英雄相关的所有路由

  2. 调用 express.Router() 函数创建路由对象

const express = require('express');
const router = express.Router();
  1. 向路由对象上挂载具体的路由
// 把app换成router,比如
router.get('/xxx/xxx', (req, res) => {});
router.post('/xxx/xxx', (req, res) => {});
  1. 使用 module.exports 向外共享路由对象
module.exports = router;
  1. 使用 app.use() 函数注册路由模块 -- app.js
// app.js 中,将路由导入,注册路由
const login = require('./router/logon.js');
app.use(login)

// app.use(require('./router/heroes.js'));
app.use( require(path.join(__dirname, 'router', 'heores.js')) );

为路由模块添加前缀

我们可以省略路由模块中的 /api 前缀,而是在注册路由的时候,统一设置。

app.use('/api', router);

具体地,在app.js中:

// 导入路由模块,并注册路由
app.use('/api',  require(path.join(__dirname, 'router', 'login.js'))  );
app.use('/my',  require(path.join(__dirname, 'router', 'heroes.js'))  );

路由文件中,把前缀 /api 和 /my 去掉。

使用路由模块的好处

  • 分模块管理路径,提高了代码的可读性
  • 可维护性更强
  • 减少路由的匹配次数
  • 权限管理更方便
  • etc...

MySql

数据库

数据库 (database) 是用来组织、存储和管理数据的仓库。 当今世界是一个充满着数据的互联网世界,充斥着大量的数据。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。为了方便管理互联网世界中的数据,就有了数据库管理系统的概念(简称:数据库)。用户可以对数据库中的数 据进行新增、查询、更新、删除等操作。

常见的数据库及分类

市面上的数据库有很多种,最常见的数据库有如下几个:

  • MySQL 数据库(目前使用最广泛、流行度最高的的开源免费数据库;)
  • Oracle 数据库(收费)
  • SQL Server 数据库(收费)
  • Mongodb 数据库(Community + Enterprise)

其中,MySQL、Oracle、SQL Server 属于传统型数据库(又叫做:关系型数据库 或 SQL 数据库),这三者的 设计理念相同,用法比较类似。

而 Mongodb 属于新型数据库(又叫做:非关系型数据库 或 NoSQL 数据库),它在一定程度上弥补了传统型 数据库的缺陷。