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

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

系列文章

  • 【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'){// 不是自己地址则404res.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.mzph.cn/news/195393.shtml

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

相关文章

低噪声,带内置 ALC 回路的双通道均衡放大器,应用于立体声收录机和盒式录音机的芯片D3308的描述

D3308 是一块带有 ALC 的双通道前置放大器。它适用于立体声收录机和盒式录音机。采用 SIP9、SOP14 的封装形式封装。 主要特点 带内置 ALC 回路的双通道均衡放大器 低噪声: VNIl.OuV(典型值)。开环电压增益高: 80dB (典型值)工作电源电压范围宽: 通道间的…

园区无线覆盖方案(智慧园区综合解决方案)

​ 李经理正苦恼头疼的工业园区数字化改造项目。近年企业快速增长,园区内Argent工业设备激增,IT部门应接不暇。为确保生产系统稳定运行,IT管理团队经过反复摸索,决定进行全面的数字化升级。然而改造之艰巨远超想象——混杂的接入环境、复杂的专线部署、长达数月的建设周期,种种…

通过网线连接的局域网电脑怎么实现上网功能

在机床里面的工控机有时候需要进行联网操作,但是又没有无线网或者外网网线,这时候可以通过笔记本的无线wifi功能实现上网功能. 通过网络适配器-找到wifi对应适配器-共享-1 打勾-2选中与工控机连接的网口-既可. 工控机端,将网口设置为自动获取IP

深度学习——第3章 Python程序设计语言(3.3 Python数据类型)

3.3 Python数据类型 目录 1. Python数值数据类型 2. Python库的导入和使用 3. Python序列数据类型 4. Python组合数据类型 计算机能处理各种类型的数据&#xff0c;包括数值、文本等&#xff0c;不同的数据属于不同的数据类型&#xff0c;有不同的存储方式&#xff0c;支持…

极狐gitlab ci job拉取代码之前执行命令

有时候我们希望可以在检索 Git 代码库和任何 submodules 之前执行一下命令操作&#xff0c;接下来为大家介绍下通过 hooks:pre_get_sources_script 可以满足该场景的使用。 文章目录 1. 开启 feature flag2. 使用方式方式1在 ci job 中定义 hooks.pre_get_sources_script 方式2…

从二叉搜索树到更大和树 : BST 中序遍历的经典运用

题目描述 这是 LeetCode 上的 「1038. 从二叉搜索树到更大和树」 &#xff0c;难度为 「中等」。 Tag : 「BST」、「中序遍历」 给定一个二叉搜索树 root (BST)&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下&#xff0c; 二叉搜…

2023-简单点-树莓派中的硬件通讯

树莓派中的通讯方式 串口通讯什么是串口通讯&#xff1f;串口通讯的特点 tips并行通讯&#xff1f;基于网络的通讯?socket通讯 串口通讯 什么是串口通讯&#xff1f; 串行通信每次传输一个位元数据&#xff0c;并在连续进行单次过程的基础上进行通信。根据数据的传送方向&am…

难以置信,一个小小的需求让我捣鼓出一个提效的网站来

难以置信&#xff0c;一个小小的需求让我捣鼓出一个提效的网站来 需求介绍 事情是这样的&#xff0c;有个群友在业务当中碰到一个小小的需求&#xff0c;需求是这样的: 页面当中存在多个输入框&#xff0c;输入框的 value 值是一个数值组成的字符串&#xff08;盲猜应该是身份…

关于开展人工智能专业人员“计算机视觉处理设计开发工程师”专项培训的通知

“人工智能技术与咨询”发布 工业与信息化部电子工业标准化研究院于2022年7月1日发布《人工智能从业技术人员要求》&#xff0c;现针对已发布标准于1月3日至7日在北京举办《自然语言与语音处理设计开发工程师》中级人才培养&#xff0c;下边是具体文件通知请大家查阅。行业人才…

对一个多维随机变量作为线性变换以后的协方差矩阵

假设是一个n维的随机变量&#xff0c;它的协方差矩阵 对做线性变换&#xff0c;其中是一个矩阵&#xff08;当然也可以是一个标量&#xff09;&#xff0c;的协方差矩阵 证明如下&#xff1a; 将代入&#xff0c;得

游戏配置表的导入使用

游戏配置表是游戏策划的标配&#xff0c;如下图&#xff1a; 那么程序怎么把把这张配置表导入使用&#xff1f; 1.首先&#xff0c;利用命令行把Excel格式的文件转化成Json格式&#xff1a; json-excel\json-excel json Tables\ Data\copy Data\CharacterDefine.txt ..\Cli…

构建满足流批数据质量监控用火山引擎DataLeap

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 面对今日头条、抖音等不同产品线的复杂数据质量场景&#xff0c;火山引擎 DataLeap 数据质量平台如何满足多样的需求&#xff1f;本文将介绍我们在弥合大数据场景下…

Apache Flink(六):Apache Flink快速入门 - Flink案例实现

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

uniapp自定义进度条组件

目标效果 原型设计为这样的样式&#xff0c;但是现有的进度条都无法满足需求&#xff0c;于是编写组件实现。 设计引用格式为 <zLineProgress :total"15" :val"7" title"你好吗" />定义组件 <template><view style"hei…

Mars3d标绘的时候通过绑定单击事件,查询点击落点的图层类型

需求期望&#xff1a; 期望可以判断标绘点落下的位置是什么图层类型&#xff0c;例如是否是3dtitles模型&#xff0c;或者是gltf模型&#xff0c;或者是其他数据图层。 需求来源&#xff1a; 标绘点时&#xff0c;无法知道点落下的地方的图层类型 解决方案&#xff1a; ma…

C++ string类(1)—初始化、容量操作、迭代器

目录 前言 一、string类 二、初始化 1、无参或带参 2、用字符串变量初始化 3、用字符串初始化 4、指定数量字符 三、容量操作 1、size 2、push_back 3、append​编辑 4、运算符 5、reserve 6、resize 四、迭代器 1、正向迭代器 2、反向迭代器 3、const迭代器…

排序算法介绍(四)快速排序

0. 简介 快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;采用了分治的思想。它选择一个基准元素&#xff0c;通过一趟排序将待排序序列分割成独立的两部分&#xff0c;其中一部分的所有元素都比基准元素小&#xff0c;另一部分的所有元素都比基准…

iOS代码混淆工具

目录 引言 混淆效果 字符串加密 代码插入 其他混淆选项说明 总结 参考资料 &#x1f512; 这是一篇介绍iOS代码混淆工具的技术博客&#xff0c;旨在帮助开发者提高代码安全性。本工具来自于Github的混淆词库和代码&#xff0c;通过差异化处理和代码合并生成数亿种用于混淆…

【备忘干货】c/c++ (wasm)和js互相调用记录

c/c&#xff08;wasm&#xff09;和js互相调用记录 废话 :)准备工作&#xff1a;安装Emscripten初探&#xff1a;C(wasm)之hello world进一步探究&#xff1a;接口调用1.js调用c&#xff0c;一些基本类型的传递&#xff08;char*&#xff0c;int&#xff0c;float&#xff09;以…

安装Python以及pycharm

Pycharm是编辑器。相当于Word对文字进行编辑。 Python是解释器。讲代码翻译为计算机可以理解的指令。 1、安装Python 官网&#xff1a;Welcome to Python.org 打开的时候有点慢等待一会就好&#xff0c;点击下载&#xff0c;选择Windows版本 等待一会&#xff0c;可以看到如…