【Node.js】笔记整理 5 - Express框架

news2024/12/26 11:45:49

写在最前:跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识,需要格外注重实战和官方技术文档,文档建议作为手册使用

系列文章

  • 【Node.js】笔记整理 1 - 基础知识
  • 【Node.js】笔记整理 2 - 常用模块
  • 【Node.js】笔记整理 3 - npm
  • 【Node.js】笔记整理 4 - node版本管理工具 nvm
  • 【Node.js】笔记整理 5 - Express框架简单入门
  • 【Node.js】笔记整理 6 - MongoDB
  • 【Node.js】笔记整理 7 - mongoose

本文目录

  • 系列文章
  • 前言
    • 1、安装
    • 2、初始化express项目
    • 3、基本配置
    • 4、路由
      • 4.1、定义
      • 4.2、组成
    • 5、获取请求体参数
    • 6、获取路由参数
    • 7、响应设置
    • 8、中间件
      • 8.1、全局中间件
      • 8.2、路由中间件
      • 8.3、静态资源中间件
      • 8.4、获取请求体数据
    • 9、防盗链
    • 10、路由模块化
  • 脚手架 - express-generator

前言

Express框架是一个基于node.js的极简web应用开发框架,他可以作为一个简单的后端去使用,换而言之,前端可以使用express框架去写后端

Express框架官网

1、安装

npm i express

2、初始化express项目

npm init
npm i express

3、基本配置

// 导入express模块
const express = require('express')

// 创建应用对象
const app = express()

// 创建后端路由
app.get('接口url', (req, res) => {
    // 对接口进行处理
    res.end(data)
})

// ...其他路由

// 开启监听,启动服务
app.listen(port, () => {
    // 服务启动成功的回调函数
})

4、路由

这个路由是后端的路由,和前端的路由有所不同,请注意

4.1、定义

路由确定了应用程序如何响应客户端对特定端点的请求,也就是说,路由是满足此条件的一种特殊映射

4.2、组成

路由的组成部分包括:请求方法method接口url回调函数callback(req, res)

express提供了以下方法可以方便地使用路由:app.<method>(path, 中间件 ,callback)

  • GET:app.get('接口url', (req, res) => {})
  • POST:app.post('接口url', (req, res) => {})
  • PUT: app.put('接口url', (req, res) => {})
  • DELETE:app.delete('接口url', (req, res) => {})

5、获取请求体参数

其实之前已经记过了

以此路由为例: app.post('/login', (req, res) => {})

api功能
req.method获取请求方法
req.url获取请求接口
req.httpVersion获取请求http版本
req.headers提取请求头信息
req.query获取请求体中的query参数
req.get(‘chosen_header’)提取指定名称的请求头
req.path获取请求的path
req.ip获取客户端的ip地址
req.params获取params参数

6、获取路由参数

req.queryreq.params

7、响应设置

首先,express是支持使用http模块设置响应设置的方法来设置响应设置的

express独有的设置相应设置的方法:

api功能
res.status( code )设置响应状态码
res.set(‘xxx’, ‘yyy’)设置响应头信息,比如设置token、Content-Type等
res.send( data )设置响应体
res.redirect( path )设置前端接收到响应体后页面重定向的path
res.download( file )设置下载相应
res.json( { name: ‘hello express’ } )设置响应JSON
res.sendFile(__dirname + ‘/filename.html’)设置响应文件内容
res.send( data )将相应信息发送给前端,该方法默认设置字符集为utf-8

以上方法均支持链式调用

8、中间件

该节很重要,学习时候请结合组件思维

**定义:**本质是一个回调函数,中间件函数可以像路由回调一样访问requestresponse

作用:使用函数封装公共操作、简化代码。其实说白了就一件事:为了高内聚、低耦合

**类型:**全局中间件、路由中间件

8.1、全局中间件

全局中间件指的是每一个请求到达服务端后都会执行的函数。从这个角度来看,其实axios拦截器就像是一种全局中间件

声明:

const middleware_name = (req, res, next) => {
    // 对req、res进行统一处理
    
    // 该中间件的功能执行结束后,若需要执行路由中设置的回调函数,那么必须next()
    next()
}

// 全局使用:
app.use(middleware_name)

8.2、路由中间件

针对某些请求进行统一处理

声明中间件:

const check = (req, res, next) => {
    if(xxxx){
        // 满足条件则处理并执行所在路由的回调
        // ...
        next()
    }else{
        // ...
    }
}

使用中间件:

app.get('/admin', check, (req, res) => {
    // ...
    res.send(data)
})

8.3、静态资源中间件

语法:express.static('静态资源文件夹路径')

app.use( express.static(__dirname + '/public/assets') )

8.4、获取请求体数据

需要使用包:body-parser

安装

npm i body-parser

导包并获取中间件函数

const bodyParser = require('body-parser')

// 按需导出函数
// 处理querystring格式请求体
let urlParser = bodyParser.urlencoded({ extended: false })
//处理JSON格式的请求体
let jsonParser = bodyParser.json()

设置路由中间件,并使用request.body获取请求体数据

app.post('接口url', urlParser, (req, res) => {
    let body = req.body
    // 对body进行处理
    
    res.send(xxx)
})

9、防盗链

防止外部网站盗取自己网站的源资源

实现:

app.use((req, res, next) => {
    // 检测请求头referer是否为自己的地址
     let referer = req.get('referer')
     if(referer){
         let url = new URL(referer)
         let hostname = url.hostname   
         if(hostname !== 'xxx'){
             // 不是自己地址则404
             res.status(404).send('xxxx')
             return
         }
     }
    next()
})

10、路由模块化

routes/user.js

const express = require('express')

// 创建路由对象
const router = express.Router();

// 创建路由规则
router.get('/login', (req, res) => {
    // ....
})
// ...

// 暴露router
module.exports = router

src/index.js

const express = require('express')
const app = express()
// 导入路由模块
const userRouter = require('../router/user')

// 使用路由
app.use(userRouter)

脚手架 - express-generator

npm install [options] express-generator

使用:

express myApp          # 初始化express项目结构
express install        # 安装依赖

在这里插入图片描述
如果你要使用express发送html页面,那么不必删除什么,如果只是做后端,要把views文件夹和发送html页面相关的代码都删干净

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1274128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA maven无法下载源代码处理

1、使用idea内置maven 在idea中新增一个mvn运行项,截图如下: 输入命令: dependency:resolve -Dclassifiersources 2、如果外部maven&#xff0c;不使用idea内部maven 在工程目录下命令行执行命令: mvn dependency:resolve -Dclassifiersources

HX3002入耳检测光感驱动调试-感0x08 寄存器溢出,不变化错误问题解决方法

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 读取光感0x08 寄存器溢出,不变化错误问题?原因 原因:没有读取到0x08数据,没有读0x…

2的幂运算

2的幂 描述 : 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 题目 : LeetCode 231.2的幂 : 231. 2 的幂 分…

vue3实现element table缓存滚动条

背景 对于后台管理系统&#xff0c;数据的展示形式大多都是通过表格&#xff0c;常常会出现的一种场景&#xff0c;从表格跳到二级页面&#xff0c;再返回上一页时&#xff0c;需要缓存当前的页码和滚动条的位置&#xff0c;以为使用keep-alive就能实现这两种诉求&#xff0c;…

centos服务器安装docker和Rabbitmq

centos服务器 一 centos安装docker1 安装docker所需要的依赖包2配置yum源3查看仓库中所有的docker版本4安装docker5 设置docker为开机自启6验证docker是否安装成功 二 使用docker安装RabbitMQ拉取RabbitMQ镜像创建并运行容器 一 centos安装docker 1 安装docker所需要的依赖包 …

RocketMQ-快速实战

MQ简介 MQ&#xff1a;MessageQueue&#xff0c;消息队列。是在互联网中使用非常广泛的一系列服务中间件。 Message&#xff1a;消息。消息是在不同进程之间传递的数据。这些进程可以部署在同一台机器上&#xff0c;也可以分布在不同机器上。&#xff08;数据形式&#xff1a…

NASM安装和结合nodepad++进行编译的过程

mov ax,0x30 mov bx,0xc0 add ax,bx times 502 db 0 db 0x55 db 0xAA nasm安装地址: https://www.nasm.us/ 下载exe安装 在命令行提示符输入nasm编译命令 nasm exam.asm -f bin -o exam.bin 此时输入回车将会执行编译过程。 1&#xff0c;启动NotePad&#xff0c;在菜单上选…

【驱动】串口驱动分析(三)-serial driver

简介 前两节我们介绍串口驱动的框架和tty core部分。这节我们介绍和硬件紧密相关的串口驱动部分。 UART驱动部分依赖于硬件平台&#xff0c;而TTY驱动和具体的平台无关。虽然UART部分依赖于平台&#xff0c;但是不管是哪个硬件平台&#xff0c;驱动的思路都是一致的&#xff…

vue3中的provide与inject跨层级组件(祖孙)间通信

provide和inject提供依赖注入&#xff0c;功能类似 vue2.x 的provide/inject 实现跨层级组件(祖孙)间通信 子或孙子组件接收到的数据可以用于读取显示&#xff0c;也可以进行修改&#xff0c;同步修改父&#xff08;祖&#xff09;组件的数据。 注意&#xff1a;无论子组件…

微服务--08--Seata XA模式 AT模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 分布式事务Seata 1.XA模式1.1.两阶段提交1.2.Seata的XA模型1.3.优缺点 AT模式2.1.Seata的AT模型2.2.流程梳理2.3.AT与XA的区别 分布式事务 > 事务–01—CAP理论…

Constraintlayout

goneMargin 约束的View隐藏时的margin 约束链风格 chainStyle 权重 bias 设置宽高比 w,h 百分比 GuideLine 基线 上下的间距 Group 指定一系列View进行绑定进行操作 通过init加载 然后setIds进行绑定 然后通过group进行操作 Layer 设置动画 Barrier Flow

QT线程的使用 循环中程序的等待

QT线程的使用 循环中程序的等待 先看效果1 pro文件2 头文件3 源文件4 ui文件先看效果 1 pro文件 QT += concurrent2 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H

⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)

1.这里我代码没啥问题~~~编辑器里也没毛病 void Start(){// 加载底图和上层图片string backgroundImagePath Application.streamingAssetsPath "/background.jpg";Texture2D backgroundTexture new Texture2D(2, 2);byte[] backgroundImageData System.IO.File.R…

qt5.15播放音频示例(4种方法)

文章目录 Qt播放音频方法一 QMediaPlayer方法二 QSound方法三 QSoundEffect方法四 QAudioOutput问题1 播放无声问题2 QAudioOutput播放嗡嗡声的问题参考Qt播放音频 在linux系统中,可以通过aplay进行简单的播放音频,如 aplay /opt/Audio/test.wav在图形界面,也可以封装apla…

【机器学习】集成学习算法之AdaBoost

文章目录 基本步骤示例生成第 1 棵决策树生产第 2 棵决策树生成第 T 棵决策树加权投票 sklearn 实现 基本步骤 首先&#xff0c;是初始化训练数据的权值分布 D 1 D_1 D1​。假设有 m m m 个训练样本数据&#xff0c;则每一个训练样本最开始时&#xff0c;都被赋予相同的权值…

传统算法:使用 Pygame 实现广度优先搜索(BFS)

使用 Pygame 模块实现了广度优先搜索(BFS)的动画演示。首先,通过邻接矩阵表示了一个图的结构,其中每个节点表示一个字符,每个字符的邻居表示与之相邻的节点。然后,通过广度优先搜索算法按层级顺序访问节点,过程中通过动画效果可视化每一步的变化。每次访问一个节点,该节…

计算机服务器中了_locked勒索病毒如何处理,_locked勒索病毒解密数据恢复

网络技术的不断发展&#xff0c;给企业的生产生活提供了极大便利&#xff0c;越来越多的企业走向数字化办公时代&#xff0c;但网络的发展也为网络安全埋下隐患&#xff0c;网络安全威胁不断增加。近期&#xff0c;云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的计…

制造企业建设数字工厂管理系统的难点主要有哪些

随着科技的飞速发展&#xff0c;制造企业正面临着从传统生产模式向数字化、智能化转型的挑战。其中&#xff0c;建设数字工厂管理系统是实现这一目标的重要途径。然而&#xff0c;在实际操作过程中&#xff0c;制造企业往往会遇到一系列难点。本文将对这些难点进行详细的分析。…

kNN-NER: Named Entity Recognition with Nearest Neighbor Search

原文链接&#xff1a;https://arxiv.org/pdf/2203.17103.pdf 预发表论文 介绍 受到增强式检索方法的启发&#xff0c;作者提出了kNN-NER&#xff0c;通过检索训练集中k个邻居的标签分布来提高模型命名实体识别分类的准确性。该框架能够通过充分利用训练信息来解决样本类别不平衡…

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示整数、小数应用

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示整数、小数应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍IIC通信简单介绍…