使用express搭建服务器
1、express模块的安装
npm install express
2、新建服务器文件.js
3、引入express模块
const express = require('express');
4、创建express服务器
const app = express();
5、开启服务器,设置端口号,(每个计算机,端口号不能重复使用)
app.listen(3006, () => console.log('express服务器开始工作了'));
app.请求方式(‘监听请求的url地址’,回调函数)
当前端口制定请求方式请求url,地址就会触发后面的回掉函数
6、后台—GET接口
返回数据用res.send
后端代码
前端测试代码
7、后台 - 获取 - GET参数
后台代码:
前台测试代码
8、后台 - 获取 - url参数
req可以获取前端发过来的参数
GET方式:
url?后面传参使用req.query就可以直接获取
如果是路径传参,使用res.params
请求体传参,(post传输参数的时候)使用req.body
如果有请求文件,后端引入插件multer,然后使用req.file拿到文件信息
路径传参,后端代码
前端代码:
后端一定要通过:设置好冒号:
只要用冒号:就代表这个地方返回:后的值作为key并把前台传过来的数据作为value显示出来
后端获取前端请求体的数据并展示:req.body
9、后台 - POST接口
后端代码:
前端代码:
10、后台 - 获取 - POST请求体 - 查询字符串
后端代码:
前端代码:
11、后台 - 获取 - POST请求体 - JSON字符串
后端代码:
前端代码:
********************************************************************个人理解开始*********************************************************
app.use(express.urlencoded({extended: false}));
可以帮我们接收并解析 content-type: application/x-www-form-urlencoded类型的请求体 中的内容
并挂载到req.body身上
前端代码
使用req.body直接获取发送的内容
req.body包含了提交数据的键值对在请求的body中,默认值是undefined
如果前端post请求体是JSON字符串,需要我们调用别的方法来转化一下
前台代码(注意请求类型是application/json)
在后端的接口上方添加即可,如果要引入多个只要继续写req.use即可
添加app.use(express.json());
即可帮我们解析 content-type: application/json 类型的内容
解析之后挂载到req.body身上
***********************************************************个人理解结束***********************************************************************
12、后台 - 获取 - POST请求体 - FormData
如果前端发送的请求体中包含请求文件(就需要别的插件的帮忙了)
multer
****************************解释(开始)******************************************************8
POST请求头: FormData对象 -- 对应的Content-Type: multipart/form-data; --XXADFsdfssf
--XXADFsdfssf代表的是分割符,类似上图,用boundary定义(也可以不用写,直接写--),--后边的内容自己定义即可
注意,定义完分割符之后不要写分号,并且空一行(规定)
开的的时候,--要在最前边,结束的时候--要在最后边
下边的图片要注意规定内容类型的格式为图片
Content-Type :
格式:
(开始)--分割符
内容的格式
(空行)
内容的值
分割符--(结束)
只有最后一个的--在后边,不是最后--都在前边
Content (内容的描述):数据类型,是form-data的数据类型,name是我们传输的参数名(key)
*****************************************解释(结束)***************************************************************
这时候我们需要第三方插件才能获取到传输的内容 multer
下载 multer : npm multer
但是如果前端发送的请求体中包含请求文件(就需要别的插件的帮忙)
加载multer const multer = require('multer')
配置上传目录 const upload = multer({ dest: 'uploads/' })
app.post('/test', upload.single('cover_img'), (req, res) => {})
接口内部,可以使用req.body接收文本值,使用req.file接收文件信息
同时,文件已经上传到了服务器
后端代码:
前端代码:
*
***************************个人理解①****************
express.static是把前端要请求的资源所在的文件夹直接暴漏出来(只要前端输入正确的url加端口号,再加上要访问的页面)
例如:http://localhost:3001/index
如果有index就会去直接访问这个html
**********************个人理解②********************************
首先,先引入multer模块
const multer = require("multer");
然后实例化一个接收FormData的工具对象
const upload = multer( ) (就像const app=express()一样)
在实例化的时候再传入一个配置对象
dest:绝对路径 (dest固定属性)让multer解析前端上传的文件对象,制定要保存到当前工程文件夹那个目录下(注意手动建文件夹)
然后upload对象集成到app对象上,才能让把服务器解析FormData内容的数据
single- 单文件(指定文件传参的名字叫cover_img)
名字随便起,但是前台传文件的时候一定要对上
{
fieldname: 'cover_img', //字段名(后台规定的名字)
originalname: '1.png', // 前端传参规定的文件原来的名字
encoding: '7bit', // 字节流
mimetype: 'image/png', // mime媒体(扩展名类型) - image/png图
destination: 'C:\\Users\\lidongxu\\Desktop\\121期_大神之路\\4_服务器端编程学习\\Day03_express入门\\2_后端代码/uploads/', // 后端保存文件的位置
filename: '52ea6cf741fc27cf1c0d4fc5e006043e', // 后端随机产生的文件名
path: 'C:\\Users\\lidongxu\\Desktop\\121期_大神之路\\4_服务器端编程学习\\Day03_express入门\\2_后端代码\\uploads\\52ea6cf741fc27cf1c0d4fc5e006043e', //这个文件保存的完整路径
size: 172746 // 图片的大小
}
重要
整体步骤:
①npm下载multer模块到当前工程中
②引用模块拿到multer方法
③用multer()传入一个配置对象,然后设置dest来指定让multer解析文件保存到那个文件夹下(文件夹自己手动创建)
④把第③步创建的upload集成到接口身上
并且再upload.single()中规定上传图片的name(key)所对应的值(value)
⑤ req.body 拿到请求体里的数据参数
⑥req.file - 拿到请求体 发来的 文件对象相关的信息 (被multer处理后的)
multer把拿到的属性和文件最后会绑定到req.body和req.file上
最终效果:拿到一个随机代码名字的文化,自己加一个后缀.png即可看到
13、multer高级用法_改上传文件的名字
一、产出不重复字符串
第三方模块包uuid:产出一个不重复的唯一的字符串
随机数+当前的时间毫秒 如果瞬间访问量过大还是可能会产生一样的字符所以使用uuid来生成
下载 npm install uuid
引入
const uuidv4 = require("uuid").v4;
v4是版本
二、创建一个multer磁盘控制对象
const storageO = multer.diskStorage()
这个方法就是用来控制multer在本地磁盘存储的方式
里边的配置对象dest,但是这里不能写简写,必须写全
const storageO = multer.diskStorage({
destination: __dirname + "/uploads/",
写我们保存的路径(据绝对路径)
这次我们需要自己定义文件的名字,所以filename采用自定义的方式
req是请求对象
file是文件对象(看下图)
cb是回调函数
filename: (req, file, cb) => {
// file就是multer接受到的文件, 生成的信息对象
// cb一定要调用, 否则代码就不会继续向下执行接口28行代码
// 我们来告诉multer文件名是什么
let extName = path.extname(file.originalname);
// 用uuid来作为文件名字拼接扩展名
let uuidName = uuidv4();
// cb来返回 - 拼接后的文件名
cb(null, uuidName + extName);
}
})
注意:cb必须调用,否则调用
file中的东西
思路:
①得到一个随机不重复的字符串
②创建一个multer磁盘控制对象
放文件存储的路径
以及对multer解析的file的内容进行修改
注意,必须调用cb,不然不会生效
uuid模块生成随机字符串名字
拼接
path模块的extname取出前台传过来的文件的后缀格式
最后用cb返回(不适用return)
cb(第一个参数是错误对象error(没有错误直接写null),然后就是拼接完成后的名字)
③把最后的文件地址发给前台
当然直接返回前端也获取不到,
所以需要后台把这个uploads下的一切返回给前端浏览器让浏览器查看
14、静态资源配置
15、前缀虚拟路径
16、express路由
每个请求对应一个响应