Node.js - Express框架
1. 介绍
Express 是一个基于 Node.js 的 Web 应用程序框架,主要用于快速、简便地构建 Web 应用程序 和 API。它是目前最流行的 Node.js Web 框架之一,具有轻量级、灵活和功能丰富的特点。
核心概念包括路由,中间件,请求与响应,以及模板引擎支持
2. Express应用的使用
通过npm进行安装express包
npm install express
示例:以下是一个最简单的Express应用程序
const express = require('express');
const app = express();// 路由:处理 GET 请求
app.get('/', (req, res) => {res.send('Hello, Express!');
});// 路由:处理动态参数
app.get('/user/:id', (req, res) => {res.send(`User ID: ${req.params.id}`);
});// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {console.log(`Server is running on http://localhost:${PORT}`);
});
3. 应用程序对象
Express的核心,负责注册路由和中间件。
使用express()函数创建一个Express应用程序的实例。
const app = express();
4. 路由
Express提供了灵活的路由机制,用于定义应用如何响应客户端的请求
get请求
用于从服务器获取资源(例如网页、数据),请求参数通常附加在URL的查询字符串中,适用于获取数据或无敏感信息的请求
const express = require('express');
const app = express();app.get('/', (req, res) => {res.send('欢迎访问首页!');
});// 带查询参数的 GET 请求
app.get('/search', (req, res) => {const query = req.query; // 获取查询参数res.send(`搜索内容:${query.keyword}`);
});app.listen(3000, () => console.log('服务器运行在 http://localhost:3000'));
访问方式:直接在浏览器地址栏输入即可
http://localhost:3000/search?keyword=express
request对象中包含了与HTTP请求相关的信息,例如请求头,URL,参数等信息
属性 | 描述 |
req.params | 包含动态路由中的参数,格式为对象。例如:/user/:id ,req.params.id 获取 id 参数 |
req.query | 包含查询字符串参数,格式为对象。例如:?name=John ,req.query.name 获取 name 参数 |
req.body | 包含 POST 请求的请求体数据,需要中间件解析(如 express.json() 或 express.urlencoded() ) |
req.headers | 包含 HTTP 请求头信息,格式为对象。 |
req.headers | 包含 HTTP 请求头信息,格式为对象 |
req.method | HTTP 请求的方法,例如:GET 、POST 、PUT 、DELETE 等 |
req.url | 请求的完整 URL |
req.path | 请求的路径部分(不包括查询字符串) |
req.hostname | 请求的主机名,不包括端口号 |
req.ip | 客户端的 IP 地址 |
示例:简易的查找返回
const express = require("express")
const file = require("./test.json")
const app = express();app.get('/singer/:id.html',(req,res)=>{let {id} = req.params;let result = file.find(item=>{if (item.id === Number(id)){return true;}})if (!result){res.statusCode=404;renderBlock.end(`<h1>404 NOT FOUND<h1>`);return;}
})
post请求
post请求则是用于向服务器提交数据,例如表单数据,JSON数据,通常会改变服务器上的数据,例如添加,修改或删除资源等操作
<!DOCTYPE html>
<html><head></head><body><form method="post" action="http://127.0.0.1:3000/submit"><textarea placeholder="输入用户名"></textarea><button>登录</button></from></body>
</html>
const express = require('express');
const app = express();app.use(express.json()); // 解析 JSON 格式的请求体
app.use(express.urlencoded({ extended: true })); // 解析 URL 编码的请求体// POST 路由
app.post('/submit', (req, res) => {const body = req.body; // 获取请求体数据res.send(`提交的数据:${JSON.stringify(body)}`);
});app.listen(3000, () => console.log('服务器运行在 http://localhost:3000'));
response包含了与HTTP响应相关的方法和属性,用于向客户端返回数据
方法 | 描述 |
res.send(body) | 发送响应数据,可以是字符串,对象,Buffer等 |
res.json(body) | 发送 JSON 格式的响应 |
res.status(code) | 设置响应状态码,例如:res.status(404) |
res.redirect(url) | 重定向到指定 URL |
res.render(view, data) | 渲染视图模板并发送响应(需要配置模板引擎) |
res.set(header, value) | 设置响应头 |
res.cookie(name, value) | 设置 Cookie(需要 cookie-parser 中间件) |
res.clearCookie(name) | 清除指定的 Cookie |
res.type(type) | 设置content-type响应头 |
res.sendFile() | 返回服务器中的文件 |
res.end() | 结束响应,但不发送数据 |
Response对象常见操作:
跳转响应
app.get('/other',(req,res)=>{res.redirect('http://www.baidu.com')})
下载响应
app.get('/other',(req,res)=>{res.download(__dirname+'/package.json')})
JSON响应
app.get('/other',(req,res)=>{res.json({name:"Ricardo"})})
响应文件内容
用于展示HTML文件等信息
app.get('/other',(req,res)=>{res.sendFile(__dirname+'/test.html')})
4. express中间件
中间件(Middleware) 是 Express 中处理请求和响应的核心机制。它是一个函数,用于处理请求对象 (req
)、响应对象 (res
),以及在请求-响应周期中执行后续中间件的 next
方法,在路由处理之前或者之后执行。
简单来讲,中间件可以拦截请求、执行某些操作,然后决定是否将请求传递给下一个中间件;它们可以用来处理日志记录、认证、数据解析、错误处理等任务。
中间件的基本形式:
function middleware(req, res, next) {// 中间件逻辑next(); // 调用 next() 将请求传递给下一个中间件
}
4.1 全局中间件
每一个请求到达服务器之后都会执行全局中间件函数,直接绑定到应用对象app上,作用域所有或指定的路由
const express = require("express");
const path = require("path");
const fs = require("fs");const app = express();// 声明中间件函数
function recordMiddleware(req, res, next) {let { url, ip } = req;fs.appendFileSync(path.resolve(__dirname, './access.log'),`${url} ${ip}\r\n`);next(); // 必须调用 next() 将请求传递给后续中间件或路由
}// 使用中间件
app.use(recordMiddleware);app.get('/home', (req, res) => {res.send("Hello express");
});app.get('/admin', (req, res) => {res.send('后台');
});// 处理 404 请求
app.all('*', (req, res) => {res.send("<h1>404 NOT FOUND</h1>");
});// 启动服务器
app.listen(3000, () => {console.log("The server started on port 3000");
});
4.2 专有/路由级中间件
与路由绑定,仅作用于特定路由
function recordMiddleware(req, res, next) {let { url, ip } = req;fs.appendFileSync(path.resolve(__dirname, './access.log'),`${url} ${ip}\r\n`);next(); // 必须调用 next() 将请求传递给后续中间件或路由
}app.get('/home', recordMiddleware,(req, res) => {res.send("Hello express");
});
需要在中间件中声明next才会进一步执行之后回调函数的内容
4.3 静态资源/内置中间件
app.use(express.static(__dirname+'/public'));
根据在public文件夹下的路径即可访问对应的文件
如果public目录下有index.html文件,单独有index.html路由的话,根目录代码'/'书写谁在前显示谁
中间件 | 描述 | 安装 |
express.json() | 解析 JSON 格式请求体 | 内置 |
express.urlencoded() | 解析 URL 编码请求体(如表单数据) | 内置 |
express.static() | 提供静态文件服务 | 内置 |
morgan | 记录 HTTP 请求日志 | 需要安装 |
cookie-parser | 解析请求中的 Cookie | 需要安装 |
cors | 处理跨域请求 | 需要安装 |
helmet | 提高应用安全性 | 需要安装 |
body-parser | 解析请求体数据,功能与 express.json() 类似 | 需要安装 |
express-session | 管理会话 | 需要安装 |
示例:中间件获取解析请求参数
首先,准备好我们的表单界面与服务端
<!DOCTYPE html>
<html><head></head><body><form action="http://127.0.0.1:3000/login" method="post">用户名:<input type="text" name="username"><br>密码:<input type="password" name="password"><br><button>登录</button></form></body>
</html>
const express = require("express")const app = express();app.get('/login',(req,res)=>{res.sendFile(__dirname+'/form.html')
})app.post('/login',(req,res)=>{res.send('获取用户的数据')
})app.listen(3000,()=>{console.log('server is running...')
})
name=John&age=25
表单所返回的数据如上述所示,我们需要在服务器端获取上述表单内容,需要使用到中间件
使用中间件解析post请求所获得的数据
const urlencodedParser = express.urlencoded({ extended: false });
使用中间件:
app.post('/login',urlencodedParser,(req,res)=>{console.log(req.body)res.send('获取用户的数据')
})
解析后的数据存放在req中body属性中,解析的内容以对象的形式进行保存
{ name: 'John', age: '25' }
示例:防盗链
防止其他网站对资源进行访问,通过header请求头中refer所实现
app.use((req,res,next)=>{let referer = req.get('referer');if (referer){let url = new URL(referer);let hostname = url.hostname; //获取站点信息if (hostname !== '127.0.0.1'){res.status(404).send('<h1>404 NOT FOUND</h1>')}
}
})
注意事项
1. 中间件顺序很重要:中间件按照定义顺序执行。
2. 确保调用next()如果不调用,后续中间件将不会执行。
5. 路由器(Router)
定义路由器级别的路由,用于为某一组路由逻辑进行模块化管理(即创建“迷你应用”)。
它的作用范围是局部的,绑定在特定的 Router
实例上。
反之使用app.get用于处理直接挂载到整个应用程序上的 HTTP GET 请求,作用范围是全局的,绑定在整个 Express 应用实例上。
const express = require('express');
const app = express();
const router = express.Router();router.get('/about', (req, res) => res.send('关于页面'));
router.get('/contact', (req, res) => res.send('联系我们'));app.use('/info', router); // 将路由器挂载到 /info 路径app.listen(3000);
最终访问路由:
3000/info/about
6. 路由模块化
单独创建一个文件夹用于存储不同作用的路由文件
// ./routes/网站首页.js
const express = require('express')const router = express()router.get('/home',(req,res)=>{res.send("网站首页")
})module.exports = router;
模块化进行声明导出,方便在主文件中进行使用
- 在主文件中配置路由,使用use挂载即可
// ./主文件.jsconst express = require("express");
const router = require('./route/home.js')const app = express();app.use(router);app.all("*",(req,res)=>{res.send("<h1>404 NOT FOUND<h1>")
})app.listen(3000,()=>{console.log("This server has been started")
})
相关文章:
Node.js - Express框架
1. 介绍 Express 是一个基于 Node.js 的 Web 应用程序框架,主要用于快速、简便地构建 Web 应用程序 和 API。它是目前最流行的 Node.js Web 框架之一,具有轻量级、灵活和功能丰富的特点。 核心概念包括路由,中间件,请求与响应&a…...
Picocli 命令行框架
官方文档 https://picocli.info/ 官方提供的快速入门教程 https://picocli.info/quick-guide.html 使用 Picocli 创建命令行应用程序 Picocli 是一个用于构建 Java 命令行应用的强大框架,它简化了参数解析和帮助消息生成的过程。 下面是如何使用 Picocli 构建简单命…...
Vscode——SSH连接不上的一种解决办法
一、完整报错: > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! > Someone could be eavesdropping on you right now (man-in-the...
Stream流
一 : Stream流的介绍 stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果; stream不会改变数据源,通常情况下会产生一个新的集合; stream具有延迟执行特性,只有调用终端操作时ÿ…...
开源文件存储分享平台Seafile部署与应用
Seafile 是一款开源的企业云盘,注重可靠性和性能,支持全平台客户端。Seafile 内置协同文档 SeaDoc ,让协作撰写、管理和发布文档更便捷。适用于团队协作、文件存储和同步的开源解决方案,它提供了可靠、安全和易用的云存储服务。主要有以下特点: 文件存储和同步:Seafile 允…...
RAG技术:是将知识库的文档和问题共同输入到LLM中
RAG技术 RAG技术是将知识库的文档和问题共同输入到LLM中 RAG技术是先从知识库中检索出与问题相关的文档片段,然后将这些检索到的文档片段与问题一起输入到LLM中进行回答。具体过程如下: 文本分块 由于LLM的上下文窗口有限,需要将长文本资料分割成较小的块,以便LLM能够有…...
战略与规划方法——深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具
深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具 在现代商业管理中,合理地分析和管理产品组合对于企业的成功至关重要。波士顿矩阵(BCG Matrix),又称为成长份额矩阵,是一种由波士顿咨询集团(Boston Consulting Group)在20世纪70年代提出的战略工具,用于帮助…...
GORM(Go语言数据交互库)
GORM(Go ORM,即对象关系映射)是Go语言中非常流行且功能强大的数据库交互库。它简化了与关系型数据库的交互过程,提供了丰富的API来处理各种数据库操作。下面将详细介绍GORM的功能、使用方法和一些高级特性。 1. 安装 首先&#…...
Spring Boot教程之五十七:在 Apache Kafka 上发布 JSON 消息
Spring Boot | 如何在 Apache Kafka 上发布 JSON 消息 Apache Kafka是一个发布-订阅消息系统。消息队列允许您在进程、应用程序和服务器之间发送消息。在本文中,我们将了解如何在 Spring Boot 应用程序中向 Apache Kafka 发送 JSON 消息。 为了了解如何创建 Spring…...
开发指南091-延迟退休算法
公布平台上人力资源系统有关延迟退休算法: package org.qlm.util;public class busiUtil {/*birthYearMonth 出生年月 yyyy-MMmode 0 男职工 1 女干部 2 女职工*/public static String calculateRetirementDate(String birthYearMonth, String mode){if ("0&…...
Flask-SQLAlchemy 基于一个base表 - 动态创建使用相同字段的其他业务表
1 安装 首先,确保您安装了 Flask 和 SQLAlchemy,以及 MySQL 的驱动程序(例如 mysql-connector-python 或 PyMySQL): pip install Flask Flask-SQLAlchemy mysql-connector-python2 创建项目结构 创建一个简单的项目…...
数据结构--二叉树
目录 有序二叉树: 平衡二叉树: 234树: 红黑树 红黑树特点: 为什么红黑树是最优二叉树? 哈夫曼树和哈夫曼编码 有序二叉树: 平衡二叉树: 在有序二叉树的基础上得来的,且左右子…...
【编译构建】用cmake编译libjpeg动态库并实现转灰度图片
先编译出libjepg动态库 1、下载libjpeg源码: https://github.com/libjpeg-turbo/libjpeg-turbo 2、编译出动态库或静态库 写一个编译脚本,用cmake构建。 #!/bin/bash# 定义变量 SOURCE_DIR"/home/user/libjpeg-turbo-main" BUILD_DIR"${SOURCE_…...
vLLM私有化部署大语言模型LLM
目录 一、vLLM介绍 二、安装vLLM 1、安装环境 2、安装步骤 三、运行vLLM 1、运行方式 2、切换模型下载源 3、运行本地已下载模型 四、通过http访问vLLM 一、vLLM介绍 vLLM(官方网址:https://www.vllm.ai)是一种用于大规模语言模型&#x…...
人工智能任务19-基于BERT、ELMO模型对诈骗信息文本进行识别与应用
大家好,我是微学AI,今天给大家介绍一下人工智能任务19-基于BERT、ELMO模型对诈骗信息文本进行识别与应用。近日,演员王星因接到一份看似来自知名公司的拍戏邀约,被骗至泰国并最终被带到缅甸。这一事件迅速引发了社会的广泛关注。该…...
ESP-IDF学习记录(5) 画一块esp32-c3 PCB板
最近看了半个多月,趁着嘉立创官方活动,研究esp32-c3规格书,白嫖PCB 和元器件。原本计划按照官方推荐的搞个四层板,结果打样太贵,火速改成双层板,用了官方的券。小于10*10,也可以使用嘉立创的免费打样。 下面…...
Day04-后端Web基础——Maven基础
目录 Maven课程内容1. Maven初识1.1 什么是Maven?1.2 Maven的作用1.2.1 依赖管理1.2.2 项目构建1.2.3 统一项目结构 2. Maven概述2.1 Maven介绍2.2 Maven模型2.2.1 构建生命周期/阶段(Build lifecycle & phases)2.2.2 项目对象模型 (Project Object Model)2.2.3 依赖管理模…...
ASP.NET Core - 日志记录系统(一)
ASP.NET Core - 日志记录系统(一) 一、日志记录二、ASP.Net Core 的日志记录2.1. 日志记录系统的接入2.2 记录日志2.3 基本配置2.3.1 日志级别2.3.2 全局输出配置2.3.3 针对特定日志提供程序的配置2.3.6 显式设置2.3.4 配置筛选原理2.3.5 日志作用域 一、…...
Linux 各个服务启动命令
目录 redis后台启动rocketMq后台启动mongodb后台启动mysql后台启动 redis后台启动 ./redis-server ./redis.confrocketMq后台启动 #关闭Nameserver sh bin/mqshutdown namesrv #关闭Broker sh bin/mqshutdown broker #启动namesrv nohup sh bin/mqnamesrv -n 127.0.0.1:9876 …...
24-25-1-单片机开卷部分习题和评分标准
依据相关规定试卷必须按评分标准进行批改。 给分一定是宽松的,能给分一定给,如有疑问也可以向学院教务办申请查卷。 一部分学生期末成绩由于紧张或其他原因导致分数过低,也是非常非常遗憾的。 个人也是非常抱歉的。 开卷考试 简答题 第一…...
Apache Hop从入门到精通 第二课 Apache Hop 核心概念/术语
1、apache hop核心概念思维导图 虽然apache hop是kettle的一个分支,但是它的概念和kettle还是有一些区别的,下图是我根据官方文档梳理的appache hop的核心概念思维导图。 2、Tools(工具) 1)Hop Conf Hop Conf 是一个…...
网络安全 | Web安全常见漏洞和防护经验策略
关注:CodingTechWork 引言 OWASP (Open Web Application Security Project) Top 10是Web应用最常见的安全风险集合,帮助开发人员和安全专家识别和防止最严重的网络安全问题。以下是基于OWASP Top 10的Web安全防护经验策略与规则集。Web开发者必须对潜在…...
Unity 3D游戏开发从入门进阶到高级
本文精心整理了Unity3D游戏开发相关的学习资料,涵盖入门、进阶、性能优化、面试和书籍等多个维度,旨在为Unity开发者提供全方位、高含金量的学习指南.欢迎收藏。 学习社区 Unity3D开发者 这是一个专注于Unity引擎的开发者社区,汇聚了众多Un…...
浅谈云计算14 | 云存储技术
云存储技术 一、云计算网络存储技术基础1.1 网络存储的基本概念1.2云存储系统结构模型1.1.1 存储层1.1.2 基础管理层1.1.3 应用接口层1.1.4 访问层 1.2 网络存储技术分类 二、云计算网络存储技术特点2.1 超大规模与高可扩展性2.1.1 存储规模优势2.1.2 动态扩展机制 2.2 高可用性…...
No.1|Godot|俄罗斯方块复刻|棋盘和初始方块的设置
删掉基础图标新建assets、scenes、scripts文件夹 俄罗斯方块的每种方块都是由四个小方块组成的,很适合放在网格地图中 比如网格地图是宽10列,高20行 要实现网格的对齐和下落 Node2D节点 新建一个Node2D 添加2个TileMapLayer 一个命名为Board&…...
二 RK3568 固件中打开 ADB 调试
一 usb adb Android 系统,设置->开发者选项->已连接到计算机 打开,usb调试开关打开 通过 usb otg 口连接 开发上位机 (windows/linux) 上位机安装 adb 服务之后 , 通过 cmd/shell: #1 枚举设备 adb devices #2 进入 android shell adb shell # 3 验证上传下载…...
鸿蒙报错Init keystore failed: keystore password was incorrect
报错如下: > hvigor ERROR: Failed :entry:defaultSignHap... > hvigor ERROR: Tools execution failed. 01-13 16:35:55 ERROR - hap-sign-tool: error: Init keystore failed: keystore password was incorrect * Try the following: > The key stor…...
Java学习笔记(二十三)
1 CacheEvict CacheEvict是Spring框架中用于清空缓存的注解。以下是对CacheEvict注解的详细介绍: 1.1 作用 CacheEvict注解的主要作用是删除缓存中的数据。在方法执行后或执行前(根据配置),它可以清空指定的缓存项或整个缓存区…...
TIOBE编程语言排行靠前的编程语言的吉祥物
Python的吉祥物:小蟒蛇 Python语言的吉祥物是一只名叫"Pythonidae"(或简称"Py")的小蟒蛇。这个吉祥物由Tobias Kohn设计于2005年,它的形象借鉴了真实的蟒蛇,但加入了一些可爱和友善的特点。小蟒蛇…...
Redis集群部署详解:主从复制、Sentinel哨兵模式与Cluster集群的工作原理与配置
集群部署形式 1、主从复制1.1 工作机制1.2 配置实现1.3 优缺点1.4 部署形式1.5 主从复制优化 2、Sentinel 哨兵模式2.1 工作机制2.2 配置实现2.3 优缺点2.4 哨兵机制选举流程2.5 脑裂问题解决方案 3、Redis Cluster3.1 工作机制3.2 配置实现3.3 优缺点3.4 故障转移3.5 哈希槽为…...
Dubbo泛化调用
本文记录下利用dubbo泛化调用实现网关server收http请求,然后转发给dubbo服务,然后收到dubbo响应的功能原理。 关键点1:dubbo泛化调用。可根据(注册中心地址、接口名,方法名,参数类型)唯一确定一个dubbo服务…...
SpringBoot工程快速启动
1.问题导入 以后我们和前端开发人员协同开发,而前端开发人员需要测试前端程序就需要后端开启服务器,这就受制于后端开发人员。 为了摆脱这个受制,前端开发人员尝试着在自己电脑上安装 Tomcat 和 Idea ,在自己电脑上启动后端程序&a…...
Docker实践:部署Docker管理工具DockerUI
Docker实践:部署Docker管理工具DockerUI 前言一、DockerUI介绍1.1 DockerUI概述1.2 镜像说明 二、检查本地Docker环境三、拉取DockerUI镜像四、创建DockerUI容器五、访问DockerUI六、DockerUI的基本使用6.1 查询宿主机容器情况6.2 查询Docker镜像列表6.3 查看容器配…...
【优先算法】滑动窗口--(结合例题讲解解题思路)(C++)
目录 1. 例题1:最大连续1的个数 1.1 解题思路 1.2代码实现 1.3 错误示范如下:我最开始写了一种,但是解答错误,请看,给大家做个参考 2. 将 x 减到 0 的最小操作数 2.1解题思路 2.2代码实现 1. 例题1ÿ…...
嵌入式系统Linux实时化(四)Xenomai应用开发测试
1、Xenomai 原生API 任务管理 Xenomai 本身提供的一系列多任务调度机制,主要有以下一些函数: int rt_task_create (RT_TASK task, const char name, int stksize, int prio, intmode) ; 任务的创建;int rt_task_start(RT_TASK task, void(entry)(void cookie), void cookie…...
深度剖析RabbitMQ:从基础组件到管理页面详解
文章目录 一、简介二、Overview2.1 Overview->Totals2.2 Overview->Nodesbroker的属性2.3 Overview->Churn statistics2.4 Overview->Ports and contexts2.5 Overview->Export definitions2.6 Overview->Import definitions 三、Connections连接的属性 四、C…...
算法每日双题精讲 —— 二分查找(二分查找,在排序数组中查找元素的第一个和最后一个位置)
🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧!💪…...
Golang—— error 和 panic
本文详细介绍Golang的两种错误处理机制:error 和 panic。 文章目录 Golang 的错误处理机制概述error特点代码示例基本用法创建 error panic特点运行时错误示例defer 和 recover 的结合使用代码示例基本用法创建 panic panic 的执行机制 error 和 panic 的对比生产环…...
xcrun: error: invalid active developer path 解决
在拉取 github 代码时,提示如下报错: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 原因是:这是由于 Xcode command line t…...
Jmeter配置服务代理器 Proxy(二)
1.创建脚本记录器 2.配置:Jmeter代理、端口、记录目标等 3.配置谷歌浏览器代理 浏览器配置代理的详细教程可参考:使用whistle代理-CSDN博客 4.启动Jmeter记录器 点击ok后弹出这个界面,生成了证书: 5.给浏览器安装Jmeter代理的证书…...
小黑工具人日常积累中:sqlserver中切割字符串,取首个子串
SELECTSUBSTRING(表名字, 1, CHARINDEX(分隔符, 字段名) - 1) AS FirstPart FROM表名字 WHERECHARINDEX(分隔符, 字段名) > 0继续尝试: 提取第二个子串 窗口函数...
港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...
关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作。根据备忘录,双方将结合各自于科研领域的优势,携手推动医学健康领域的交流与合作。合作方向将涵盖人才培训、…...
掌握Golang strings包:高效字符串处理指南
掌握Golang strings包:高效字符串处理指南 引言为什么要学习和掌握strings包本教程的目标 基本用法strings包概述导入strings包常用函数列表及简要介绍 字符串创建与基本操作创建字符串字符串连接:Join重复字符串:Repeat修改字符串࿱…...
关于husky8.0 与 4.0的配置
husky的场景使用很多,一般大多场景是在配置git commit 命令拦截hook, 校验 commit-msg 格式规范。以下环境默认:git > 2.27.0, node >14 1、安装huskey8.0.1 npm install --save-dev husky8.0.1 2、初始化配置文件 在package.json scripts 属性…...
【RK3588 Linux 5.x 内核编程】-Linux内核数据结构详解(双向链表、基数树、位数组)
Linux内核数据结构详解(双向链表、基数树、位数组) 文章目录 Linux内核数据结构详解(双向链表、基数树、位数组)1、双向链表2、基数树3、位数组3.1 Linux内核中的位数组和位操作3.2 位数组声明3.3 特定于架构的位操作3.4 常见的位操作Linux内核提供了不同的数据结构实现,如…...
3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)
在上个版本Qt Quick-QML地图引擎之v4版本(新增多模型切换/3D模型欧拉角模拟)_qt加载3d地图-CSDN博客更新了3D模拟功能,在4.3版本增加动态轨迹线、三个地图(海图/天地图街道/天地图卫星)。 4.3版本已经支持qt6 cmake版本,而4.3版本以下支持qt5版本&#x…...
使用WebdriverIO和Appium测试App
1.新建项目 打开Webstorm新建项目 打开终端输入命令 npm init -y npm install wdio/cli allure-commandline --save-dev npx wdio config 然后在终端依次选择如下: 然后在终端输入命令: npm install wdio/local-runnerlatest wdio/mocha-frameworkla…...
前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单
一、最早的灵感 最早的灵感来自sprider / 网络爬虫 / 爬虫配置,在爬虫爬取网站文章时候,会输入给爬虫一个配置文件,里边的内容是一个json对象。里边包含了所有想要抓取的页面的信息。爬虫通过这个配置就可以抓取目标网站的数据。其实本文要引…...
工具推荐:PDFgear——免费且强大的PDF编辑工具 v2.1.12
PDFgear——免费且强大的PDF编辑工具 v2.1.12 软件简介 PDFgear 是一款 完全免费的 PDF 软件,支持 阅读、编辑、转换、合并 以及 跨设备签署 PDF 文件,无需注册即可使用。它提供了丰富的 PDF 处理功能,极大提升了 PDF 文件管理的便捷性和效…...
【Unity3D】【已解决】TextMeshPro无法显示中文的解决方法
TextMeshPro无法显示中文的解决方法 现象解决方法Assets 目录中新建一个字体文件夹在C:\Windows\Fonts 中随便找一个中文字体的字体文件把字体文件拖到第一步创建的文件夹中右键导入的字体,Create---TextMeshPro---Font Asset,创建字体文件资源把 SDF文件…...