Node第三天学习总结

使用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路由

每个请求对应一个响应






最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容