【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.hqwc.cn/news/235969.html

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

相关文章

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

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

玩转大数据:3-Hadoop家族的力量与挑战

引言 Hadoop作为一个强大的大数据处理框架&#xff0c;以其分布式计算和存储能力在业界备受关注。然而&#xff0c;Hadoop在应用场景、适用范围、社区支持以及后续持续发展等方面也面临着一些挑战。本文将围绕Hadoop的生态应用&#xff0c;以及来自其他生态的挑战&#xff0c;…

【排序,直接插入排序 折半插入排序 希尔插入排序】

文章目录 排序排序方法的分类插入排序直接插入排序折半插入排序希尔插入排序 排序 将一组杂乱无章的数据按照一定规律排列起来。将无序序列排成一个有序序列。 排序方法的分类 储存介质&#xff1a; 内部排序&#xff1a;数据量不大&#xff0c;数据在内存&#xff0c;无需…

leetcode 18. 四数之和(优质解法)

代码&#xff1a; class Solution {public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> listsnew ArrayList<>();int lengthnums.length;Arrays.sort(nums);for(int i0;i<length-4;){for(int ji1;j<lengt…

【ArcGIS Pro二次开发】:CC工具箱1.1.4更新_免费_50+工具

CC工具箱1.1.4更新【2023.11.30】 使用环境要求&#xff1a;ArcGIS Pro 3.0 一、下载链接 工具安装文件及使用文档&#xff1a; https://pan.baidu.com/s/1OJmO6IPtMfX_vob3bMtvEg?pwduh5rhttps://pan.baidu.com/s/1OJmO6IPtMfX_vob3bMtvEg?pwduh5r 二、使用方法 1、在下…

抖音本地生活服务商申请条件

抖音的本地生活服务商目前有两种&#xff0c;一种是可以做全国的服务商&#xff0c;我们一般叫抖音本地生活服务商&#xff0c;一种是区域优待服务商&#xff0c;也就是后面出来的服务商&#xff0c;这两种服务商的申请方式大同小异。 相同的地方就是都需要给平台交保证金。抖…

Go语言 值传递

官方说法&#xff0c;Go中只有值传递&#xff0c;没有引用传递 而Go语言中的一些让你觉得它是引用传递的原因&#xff0c;是因为Go语言有值类型和引用类型&#xff0c;但是它们都是值传递。 值类型 有int、float、bool、string、array、sturct等 引用类型有slice&#xff0c…

FlatLaf:干净、优雅、扁平化,基于java swing现代开源跨平台外观

一个很不错的java swing ui库&#xff0c;idea主题风格&#xff0c;还能自定义 FlatLaf是用于JavaSwing 桌面应用程序的现代开源跨平台外观。 它看起来几乎是平的&#xff08;没有阴影或渐变&#xff09;、干净、简单和优雅。FlatLaf带有Light、Dark、IntelliJ和Darcula主题&a…

11 款顶级的免费 iPhone 数据恢复软件

iPhone 拥有巨大的存储容量。您可以在 iPhone 设备上存储图像、文档和视频等数据。有时&#xff0c;您的 iPhone 会发生许多意外事件&#xff0c;例如意外删除&#xff0c;从而导致数据丢失。这里有 11 个最好的免费 iPhone 数据恢复软件&#xff0c;您可以免费下载&#xff0c…

[架构之路-255]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件架构风格

前言&#xff1a; 风格是指在不同领域内&#xff0c;人们在表达自己的过程中&#xff08;如艺术、音乐、文化、时尚、建筑、软件系统等&#xff09;&#xff0c;所选择的、相对稳定的表达方式和特征的总和。在不同领域内都存在着多种不同的风格。 在艺术领域内&#xff0c;也…

zabbix分布式监控平台从IPV4切换到IPV6之监控主机切换

现在有一套监控了海量服务器的zabbix分布式监控平台需整体在线从IPV4切换到IPV6&#xff0c;不能影响其原有的定制监控及视图。本文讲解了切换的第一步--监控主机切换。 一、zabbix分布式监控平台平台架构 本套zabbix分布式监控平台是一个多代理服务器分布式部署的典型传统架构…

和鲸科技与国科环宇建立战略合作伙伴关系,以软硬件一体化解决方案促进科技创新

近日&#xff0c;在国科环宇土星云算力服务器产品发布会暨合作伙伴年度会上&#xff0c;和鲸科技与国科环宇正式完成战略伙伴签约仪式&#xff0c;宣布达成战略合作伙伴关系。未来&#xff0c;双方将深化合作&#xff0c;充分发挥在产品和市场方面的互补优势&#xff0c;为企事…