【Node】一文掌握 Express 的详细用法(Express 备忘速查)
文章目录
- 入门
- Hello World
- express -h
- express()
- Router
- Application
- Request
- 属性
- 方法
- Response
- 属性
- 方法
- 示例
- Router
- Response
- Request
- res.end()
- res.json([body])
- app.all
- app.delete
- app.disable(name)
- app.disabled(name)
- app.engine(ext, callback)
- app.listen([port[, host[, backlog]]][, callback])
- 路由
- 中间件
- 使用模版
这是用于 Node.js 的快速、不拘一格、极简主义的 Web 框架,包含 Express.js 的 API 参考列表和一些示例
入门
Hello World
-
创建项目,添加
package.json配置$ mkdir myapp # 创建目录 $ cd myapp # 进入目录 $ npm init -y # 初始化一个配置 -
安装依赖
$ npm install express # 安装依赖 -
入口文件
index.js添加代码:const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => {res.send('Hello World!') }) app.listen(port, () => {console.log(`监听端口${port}示例应用`) }) -
使用以下命令运行应用程序
$ node index.js
express -h
Usage: express [options] [dir]
Options:-h, --help 输出使用信息--version 输出版本号-e, --ejs 添加 ejs 引擎支持--hbs 添加 hbs 引擎支持--pug 添加 pug 引擎支持-H, --hogan 添加 hogan.js 引擎支持--no-view 无视图引擎生成-v, --view <engine> 添加视图 <engine> 支持 (ejs|hbs|hjs|jade|pug|twig|vash) (默认jade) -c, --css <engine> 添加样式表 <engine> 支持 (less|stylus|compass|sass) (默认css)--git 添加 .gitignore-f, --force 强制非空目录
创建一个 myapp 的项目
$ express --view=pug myapp
# 运行应用程序
$ DEBUG=myapp:* npm start
express()
| :- | :- |
|---|---|
express.json() | # |
express.raw() | # |
express.Router() | # |
express.static() | # |
express.text() | # |
express.urlencoded() | # |
Router
| :- | :- |
|---|---|
router.all() | # |
router.METHOD() | # |
router.param() | # |
router.route() | # |
router.use() | # |
Application
var express = require('express')
var app = express()console.dir(app.locals.title)
// => 'My App'
console.dir(app.locals.email)
// => 'me@myapp.com'
属性
| :- | :- |
|---|---|
app.locals | 应用程序中的局部变量 # |
app.mountpath | 安装子应用程序的路径模式 # |
Events
| :- | :- |
|---|---|
mount | 子应用挂载到父应用上,子应用上触发事件 # |
方法
| :- | :- |
|---|---|
app.all() | # |
app.delete() | # |
app.disable() | # |
app.disabled() | # |
app.enable() | # |
app.enabled() | # |
app.engine() | # |
app.get(name) | # |
app.get(path, callback) | # |
app.listen() | # |
app.METHOD() | # |
app.param() | # |
app.path() | # |
app.post() | # |
app.put() | # |
app.render() | # |
app.route() | # |
app.set() | # |
app.use() | # |
Request
属性
| :- | :- |
|---|---|
req.app | # |
req.baseUrl | # |
req.body | # |
req.cookies | # |
req.fresh | # |
req.hostname | # |
req.ip | # |
req.ips | # |
req.method | # |
req.originalUrl | # |
req.params | # |
req.path | # |
req.protocol | # |
req.query | # |
req.route | # |
req.secure | # |
req.signedCookies | # |
req.stale | # |
req.subdomains | # |
req.xhr | # |
方法
| :- | :- |
|---|---|
req.accepts() | # |
req.acceptsCharsets() | # |
req.acceptsEncodings() | # |
req.acceptsLanguages() | # |
req.get() | 获取HTTP 请求头字段 # |
req.is() | # |
req.param() | # |
req.range() | # |
Response
app.get('/', function (req, res) {console.dir(res.headersSent) // falseres.send('OK')console.dir(res.headersSent) // true
})
属性
| :- | :- |
|---|---|
res.app | # |
res.headersSent | # |
res.locals | # |
方法
| :- | :- |
|---|---|
res.append() | # |
res.attachment() | # |
res.cookie() | # |
res.clearCookie() | # |
res.download() | 提示要下载的文件 # |
res.end() | 结束响应过程 # |
res.format() | # |
res.get() | # |
res.json() | 发送 JSON 响应 # |
res.jsonp() | 发送带有 JSONP 支持的响应 # |
res.links() | # |
res.location() | # |
res.redirect() | 重定向请求 # |
res.render() | 渲染视图模板 # |
res.send() | 发送各种类型的响应 # |
res.sendFile() | 将文件作为八位字节流发送 # |
res.sendStatus() | # |
res.set() | # |
res.status() | # |
res.type() | # |
res.vary() | # |
示例
Router
为传递给此路由器的任何请求调用
router.use(function (req, res, next) {// .. 这里有一些逻辑 .. 像任何其他中间件一样next()
})
将处理任何以 /events 结尾的请求
// 取决于路由器在哪里 "use()"
router.get('/events', (req, res, next) => {// ..
})
Response
res 对象表示 Express 应用程序在收到 HTTP 请求时发送的 HTTP 响应
app.get('/user/:id', (req, res) => {res.send('user ' + req.params.id)
})
Request
req 对象表示 HTTP 请求,并具有请求查询字符串、参数、正文、HTTP 标头等的属性
app.get('/user/:id', (req, res) => {res.send('user ' + req.params.id)
})
res.end()
res.end()
res.status(404).end()
结束响应过程。这个方法其实来自 Node 核心,具体是 http.ServerResponse 的 response.end() 方法
res.json([body])
res.json(null)
res.json({ user: 'tobi' })
res.status(500).json({ error: 'message' })
app.all
app.all('/secret', function (req, res, next) {console.log('访问秘密部分...')next() // 将控制权传递给下一个处理程序
})
app.delete
app.delete('/', function (req, res) {res.send('DELETE request to homepage')
})
app.disable(name)
app.disable('trust proxy')
app.get('trust proxy')
// => false
app.disabled(name)
app.disabled('trust proxy')
// => trueapp.enable('trust proxy')
app.disabled('trust proxy')
// => false
app.engine(ext, callback)
var engines = require('consolidate')app.engine('haml', engines.haml)
app.engine('html', engines.hogan)
app.listen([port[, host[, backlog]]][, callback])
var express = require('express')var app = express()
app.listen(3000)
路由
const express = require('express')
const app = express()// 向主页发出 GET 请求时响应“hello world”
app.get('/', (req, res) => {res.send('hello world')
})
// GET 方法路由
app.get('/', (req, res) => {res.send('GET request to the homepage')
})// POST 方法路由
app.post('/', (req, res) => {res.send('POST request to the homepage')
})
中间件
function logOriginalUrl (req, res, next) {console.log('ReqURL:', req.originalUrl)next()
}function logMethod (req, res, next) {console.log('Request Type:', req.method)next()
}const log = [logOriginalUrl, logMethod]app.get('/user/:id', log,(req, res, next)=>{res.send('User Info')}
)
使用模版
app.set('view engine', 'pug')
在 views 目录下创建一个名为 index.pug 的 Pug 模板文件,内容如下
htmlheadtitle= titlebodyh1= message
创建一个路由来渲染 index.pug 文件。如果未设置视图引擎属性,则必须指定视图文件的扩展名
app.get('/', (req, res) => {res.render('index', {title: 'Hey', message: 'Hello there!'})
})
相关文章:
【Node】一文掌握 Express 的详细用法(Express 备忘速查)
文章目录 入门Hello Worldexpress -hexpress()RouterApplicationRequest属性方法 Response属性方法 示例RouterResponseRequestres.end()res.json([body])app.allapp.deleteapp.disable(name)app.disabled(name)app.engine(ext, callback)app.listen([port[, host[, backlog]]]…...
chromium魔改——绕过无限debugger反调试
在进行以下操作之前,请确保已完成之前文章中提到的 源码拉取及编译 部分。 如果已顺利完成相关配置,即可继续执行后续操作。 在浏览器中实现“无限 debugger”的反调试技术是一种常见的手段,用于防止他人通过开发者工具对网页进行调试或逆向…...
Spring 核心技术解析【纯干货版】- XVI:Spring 网络模块 Spring-WebMvc 模块精讲
在现代 Web 开发中,高效、稳定、可扩展的框架至关重要。Spring WebMvc 作为 Spring Framework 的核心模块之一,为开发人员提供了强大的 MVC 体系支持,使得 Web 应用的构建更加便捷和规范。无论是传统的 JSP 视图渲染,还是基于 RES…...
【GPT入门】第33课 从应用场景出发,区分 TavilyAnswer 和 TavilySearchResults,代码实战
【GPT入门】第33课 从应用场景出发,区分 TavilyAnswer 和 TavilySearchResults,代码实战 1. 区别应用场景 2. 代码使用3.代码执行效果 在langchain_community.tools.tavily_search中,TavilyAnswer和TavilySearchResults有以下区别和应用场景&…...
JS dom修改元素的style样式属性
1通过样式属性修改 第三种 toggle有就删除 没就加上...
灭火器离位检测:智能视觉守护安全
利用视觉分析实现明火检测:技术、功能与应用 一、背景 清明节期间,兰州市连续发生多起因祭祖烧纸引发山火的警情,如七里河区魏岭乡赵某某等人上坟烧纸未妥善处理烛火引燃杂草,导致3人烧伤;七里河区彭家坪石板山村村民…...
网络:华为数通HCIA学习:IP路由基础
华为HCIA学习 IP路由基础路由协议或路由种类以及对应路由的优先级按工作区域分类:按工作机制及算法分类:路由的优先级路由器选择最优路由的顺序是什么? 前言自治系统LAN和广播域路由选路IP路由表路由度量建立路由表最长匹配原则路由器转发数据包总结 IP…...
多线程开发中List的使用
由于ArrayList在多线程高并发情况下是不安全的,因此要慎用,那么此时如果涉及到集合操作,应该怎么选: 方案一:Vector: 特点:通过给所有方法都用 synchronized 修饰从而保证线程安全, 缺点&…...
使用 .NET 9 和 Azure 构建云原生应用程序:有什么新功能?
随着 .NET 9 推出一系列以云为中心的增强功能,开发人员拥有比以往更多的工具来在 Azure 上创建可扩展、高性能的云原生应用程序。让我们深入了解 .NET 9 中的一些出色功能,这些功能使构建、部署和优化云应用程序变得更加容易,并附有示例以帮助…...
前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标防抖处理、mousemove、debounce()、事件停止触发、超时触发
文章目录 代码使用lodashjs库debounce函数做防抖处理(只有鼠标移动停止并超过一定时间,才会触发)手写防抖函数写法1写法2(注意addEventListener监听函数的第二个参数接收的是一个函数,需要构造一个匿名返回函数&#x…...
开源守护,智护童年——幼儿园未成年行为与安全智能监控系统
在孩子成长的每一步,安全始终是第一位的。幼儿园作为孩子们探索世界的起点,其安全管理的重要性不言而喻。然而,哭闹、打闹、意外跌倒,甚至外部隐患如陌生人逗留、内部管理疏漏等问题,常常让传统人工监控捉襟见肘。家长…...
WinForm真入门(5)——控件的基类Control
控件的基类–Control 用于 Windows 窗体应用程序的控件都派生自 Control类并继承了许多通用成员,这些成员都是平时使用控件的过程最常用到的。无论要学习哪个控件的使用,都离不开这些基本成员,尤其是一些公共属性。由于 Conlrol 类规范了控件的基本特征…...
《Linux内存管理:实验驱动的深度探索》【附录】【实验环境搭建 4】【Qemu 如何模拟numa架构】
我们在学习 linux 内核时,会涉及到很多 numa 的知识,那我们该如何在 qemu 中模拟这种情况,来配合我们的学习呢? 我们该如何模拟 如下的 numa 架构 Qemu 模拟 NUMA 架构 -M virt,gic-version3,virtualizationon,typevirt \ -cp…...
【YOLO系列(V5-V12)通用数据集-工程用车检测数据集】
YOLO格式的工程车检测数据集,适用于YOLOv5-v11所有版本,可以用于本科毕设、发paper、做课设等等,有需要的在这里获取: 【YOLO系列(V5-V12)通用数据集-工程用车检测数据集】 【工程车类型检测数据集】共2655…...
卫星智能化健康管理#卫星工程系列
伴随我国航天业飞速发展,积累了大量的卫星试验数据,如何从海量、多源、多模态的卫星试验数据中挖掘分析出内部规律和潜在价值,构建卫星装备系统的全生命周期试验数据知识体系显得尤为迫切。卫星故障传统的诊断方法局限在门限层面,…...
【面试篇】Mysql
1. 请介绍一下 MySQL 常见的存储引擎(如 InnoDB、MyISAM),它们的特点分别是什么?在什么场景下适合使用 InnoDB,什么场景下适合使用 MyISAM? InnoDB: 特点:支持事务,具有…...
Neo4j操作数据库(Cypher语法)
Neo4j数据库操作语法 使用的数据库版本 (终端查询) >neo4j --version 2025.03.0批量上传数据 UNWIND [{name: Alice, age: 30},{name: Bob, age: 25} ] AS person CREATE (p:Person) SET p.name = person.name, p.age = person.age RETURN p;查询结点总数 MATCH (n) RETU…...
当AI开始“思考“:大语言模型的文字认知三部曲
引言:从《黑客帝国》说起 1999年上映的科幻经典《黑客帝国》描绘了一个令人震撼的未来图景——人类生活在一个由人工智能构造的数字矩阵中。当我们观察现代大型语言模型的工作原理时,竟发现与这个虚构世界有着惊人的相似:人们正在用矩阵以及矩…...
[GN] Python3基本数据类型 -- 与C的差异
文章目录 前言Python3的基本数据类型6个标准的数据类型NumbersStringListtupleSetsDictionaries Python运算符逻辑 运算符成员运算符身份运算符 Python3 数字Python3 序列序列切片序列相加序列相乘序列相关内置函数 Python3 列表访问列表的值更新列表删除列表元素拼接列表嵌套列…...
公司论坛数据构建情感标注数据集思考
公司论坛有一个评论区,会有小伙伴在上面进行评论,聊天,大部份都是积极向上的,但是也有小小的一部分消极的言论,“就像白纸上的一个黑点”,和产品对接的大佬如是说。所以想思考做一个情感标注数据集…...
MSF上线到CS工具中 实战方案(可执行方案)
目录 实际案例背景 步骤详解 1. 获取低权限 Meterpreter 会话 1.1 使用 Metasploit 获取会话 2. 提权到 SYSTEM 权限 2.1 使用 getsystem 自动提权 2.2 如果 getsystem 失败:使用令牌冒充 (incognito 模块) 3. 上线到 Cobalt Strike 3.1 生成 Cobalt Strik…...
ffmpeg中格式转换需要注意点总结
某些封装格式(例如MP4/FLV/MKV等)的H.264码流的SPS和PPS信息存储在AVCodeccontext结构体的extradata中。分离某些封装格式(例如MP4/FLV/MKV等)中的H.264的时候,需要首先写入SPS和PPS,否则会导致分离出来的数据没有SPS、PPS而无法播。需要使用ffmpeg中名称…...
IntelliJ IDEA 2020~2024 创建SpringBoot项目编辑报错: 程序包org.springframework.boot不存在
目录 前奏解决结尾 前奏 哈!今天在处理我的SpringBoot项目时,突然遇到了一些让人摸不着头脑的错误提示: java: 程序包org.junit不存在 java: 程序包org.junit.runner不存在 java: 程序包org.springframework.boot.test.context不存在 java:…...
基于DeepSeek、ChatGPT支持下的地质灾害风险评估、易发性分析、信息化建库及灾后重建
前言: 地质灾害是指全球地壳自然地质演化过程中,由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。在降水、地震等自然诱因的作用下,地质灾害在全球范围内频繁发生。我国不仅常见滑坡灾害,还…...
Websoft9分享:在数字化转型中选择开源软件可能遇到的难题
引言:中小企业数字化转型的必由之路 全球94.57%的企业已采用开源软件(数据来源:OpenLogic 2024报告),开源生态估值达8.8万亿美元。中小企业通过开源软件构建EPR系统、企业官网、数据分析平台等,可节省80%软件采购成本。…...
《在 Ubuntu 22.04 上安装 CUDA 11.8 和 Anaconda,并配置环境变量》
安装 CUDA 11.8 和 Anaconda 并配置环境变量 在本教程中,我们将介绍如何在 Ubuntu 22.04 上安装 CUDA 11.8 和 Anaconda,并配置相应的环境变量。我们还将配置使用 阿里云镜像源 来加速软件包更新。以下是具体步骤。 步骤 1:更新软件源 首先…...
【蓝桥杯】算法笔记3
1. 最长上升子序列(LIS) 1.1. 题目 想象你有一排数字,比如:3, 1, 2, 1, 8, 5, 6 你要从中挑出一些数字,这些数字要满足两个条件: 你挑的数字的顺序要和原来序列中的顺序一致(不能打乱顺序) 你挑的数字要一个比一个大(严格递增) 问:最多能挑出多少个这样的数字? …...
Windows修改hosts文件让向日癸软件联网
Windows修改hosts文件让向日癸软件联网 前言一、查看向日葵软件使用的网址及IP1.清除dns记录2.打开向日葵软件并将dns记录导出txt 二、修改Windows服务器的hosts文件1.winx选择Windows PowerShell(管理员)2.在Windows PowerShell中输入如下内容:3.在hosts文件最后添…...
2021 CCF CSP-S2.括号序列
题目 4091. 括号序列 算法标签: 区间 d p dp dp 思路 区间 d p dp dp添加维表示形态 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k], 对于每种形态考虑状态如何进行转移, 枚举的时候不能重复, 星号也要定义唯一的解析方式, 算法时间复杂度 O ( n 3 ) O(n ^ 3) O(n3) 代码 #…...
Uni-app 项目 PDF 批注插件库在线版 API 示例教程
本文章介绍 Uni-app 项目中 PDF 批注插件库 ElasticPDF 在线版 API 示例教程,API 包含 ① 导出批注后PDF数据;② 导出纯批注 json 数据;③ 加载旧批注;④ 切换文档;⑤ 切换用户;⑥ 清空批注 等数据处理功能…...
