//导入模块
const express = require('express');
//创建应用
const app =  express();//设置路由
app.get('/',(req,resp)=>{//输出响应console.log('request coming.............');resp.json(req.headers);
});app.get('/user/:id', (req, res) => {const userId = req.params.id; // 获取 URL 中的路由参数res.send(`User ID: ${userId}`);
});app.get('/user/userId', (req,resp) => { resp.json({method: req.method,path: req.path,url: req.url,query: req.query,params: req.params,headers: req.headers,cookies: req.cookies,ip: req.ip || req.ips});
}); app.get('/user2/:id/name/:name', (req, res) => {const userId = req.params.id; // 获取 URL 中的路由参数res.send(`User ID: ${userId}`);
});//多个路由函数app.get('/tt', (req,resp,next) => { console.log('${req.method} ${req.path}');next();
}, (req, resp) => {resp.send('首页');
});function logger(req, resp, next) { console.log('${req.method} ${req.path}');next();
};function home(req, resp) { resp.send('首页');
}app.get('/tt2', [logger, home]);//公共路由
app.get('/usr/login', (req, resp) => { resp.send('登录页面');
});
app.post('/usr/login', (req, resp) => { resp.send('登录处理');
});
//将上面的两个总方法合并为一个
app.route().get((req, resp) => { resp.send('登录页面');}).post((req, resp) => {resp.send('登录处理');});app.listen(8080,()=>{console.log('listening on 8080');
});

模块化路由

//Express 提供的Router 对象可以实现路由和入口JS的解耦,用于模块化的路由有以下有点:
const express = require('express');
const router = express.Router();
router.get('/login', (req,resp) => { console.log('${req.method} ${req.path}');resp.send('登录');
});router.get('/register', (req,resp) => { console.log('${req.method} ${req.path}');resp.send('注册');
});module.exports = router;    =====================================const express = require('express');
const router = express.Router();
router.get('/list', (req,resp) => { console.log('${req.method} ${req.path}');resp.send('动态列表');
});
module.exports = router;    
=================================const express = require('express');
const router = express.Router();
router.get('/list', (req,resp) => { console.log('${req.method} ${req.path}');resp.send('动态列表');
});
module.exports = router;    =========================================
//导入模块
const express = require('express');
//创建应用
const app = express();const user = require('./user');
const timeline = require('./timeline');app.use('/user', user);
app.use('/timeline',timeline);app.listen(8080,()=>{console.log('listening on 8080');
});//上面的代码最终会生成一下路由
// get /user/login
// get /user /register
// get /timeline/list

=============================================
请求获取cookie
安装cookie-parser
C:\Users\Administrator\Desktop\expres-example>npm install cookie-parser --save
added 2 packages in 3s
14 packages are looking for funding
run npm fund for details
编写代码

//导入模块
const express = require('express');
const cookieParser = require('cookie-parser');
//创建应用
const app = express();
app.use(cookieParser());
app.get('/',(req,resp)=>{//输出响应console.log('request coming.............');resp.json({cookies: req.cookies});
});app.listen(8080,()=>{console.log('listening on 8080');
});

在这里插入图片描述
获取请求体
安装 body-parser
C:\Users\Administrator\Desktop\expres-example>npm install body-parser --save
up to date in 2s
14 packages are looking for funding
run npm fund for details
编写代码

//导入模块
const express = require(‘express’);
const cookieParser = require(‘cookie-parser’);
const bodyParser = require(‘body-parser’);
//创建应用
const app = express();
app.use(cookieParser());
app.use(bodyParser());
app.get(‘/’,(req,resp)=>{
//输出响应
console.log(‘request coming…’);
resp.json({cookies: req.cookies});
});

Express 4.16.0版本开始 新版本已经不能使用了 报错如下

Error: The bodyParser() generic has been split into individual middleware to use instead.
at bodyParser (c:\Users\Administrator\Desktop\expres-example\node_modules\body-parser\index.js:79:9)
at Object. (c:\Users\Administrator\Desktop\expres-example\src\cookie.js:8:9)
at Module._compile (node:internal/modules/cjs/loader:1730:14)
at Object…js (node:internal/modules/cjs/loader:1895:10)
at Module.load (node:internal/modules/cjs/loader:1465:32)
案例:
const express = require(‘express’);
const bodyParser = require(‘body-parser’);
const app = express();

// 解析 application/json 类型的数据
app.use(bodyParser.json());

// 解析 application/x-www-form-urlencoded 类型的数据
app.use(bodyParser.urlencoded({ extended: true }));

app.post(‘/your-endpoint’, (req, res) => {
console.log(req.body); // 这里可以访问到POST请求的body参数
res.send(‘Data received’);
});

app.listen(3000, () => {
console.log(‘Server is running on port 3000’);
});

====================================

express  原始方式的post请求 参数获取
//导入模块
const express = require('express');
const cookieParser = require('cookie-parser');
//const bodyParser = require('body-parser');
//创建应用
const app = express();
app.use(cookieParser());
// 解析application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));// 解析 application/json
app.use(express.json());  //app.use(bodyParser());
app.get('/',(req,resp)=>{//输出响应console.log('request coming.............');resp.json({cookies: req.cookies});
});
app.post('/user',(req,resp)=>{//输出响应console.log('request coming.............');resp.json(req.body);
});
app.listen(8080,()=>{console.log('listening on 8080');
});

使用raw-body中间件(对于非JSON/URL编码的body)
如果你需要处理非JSON或URL编码格式的body(例如,原始的二进制数据),你可以使用raw-body中间件。首先,安装raw-body

npm install raw-body
const express = require('express');
const rawBody = require('raw-body');
const app = express();app.use((req, res, next) => {rawBody(req, {length: req.headers['content-length'],limit: '1mb', // 设置最大限制大小,防止内存溢出encoding: rawBody.TEXT // 或者 rawBody.RAW,根据需要选择文本或原始二进制数据格式}, (err, string) => {if (err) return next(err); // 处理错误情况req.text = string; // 将解析后的文本或二进制数据添加到req对象上,以便后续处理next(); // 继续执行下一个中间件或路由处理函数});
});app.post('/your-endpoint', (req, res) => {console.log(req.text); // 这里可以访问到POST请求的原始body数据(文本或二进制)res.send('Data received');
});app.listen(3000, () => {console.log('Server is running on port 3000');
});

==========================================
响应对象:
repsonse.status() 响应状态
response.set(field[,value]) 设置响应包头
response.download() 通过设置 Content-Disposition 响应头提示客户端下载
response.download(path[,filename],[,option],[,callback])

app.get('/download', function(req, res) {var filePath = '/path/to/file'; // 文件路径var fileName = 'example.txt'; // 可选的文件名res.download(filePath, fileName);
});

response.end() 结束响应
response.redirect() 重定向
response.render() 页面渲染
response.cookie() 设置cookie
cookie 包含的属性:
name
value
options 选项:
domain 域名
expire GMT 到期时间,如果没有设置或者为0 ,则关闭浏览器之后失效
httpOnly 讲cookie标记为只有http 服务请求才能访问
maxAge : 以毫秒为单位的过期时间,比expire GMT更灵活
path cookie 的路径
secure 标记只有在https 协议下才能请求
signed 表示是否对 cookie 签名

repsones.send() 发送http 响应

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

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

相关文章

Python 数据可视化:柱状图/热力图绘制实例解析

Python 数据可视化:柱状图绘制实例解析 一、引言 数据可视化是数据分析中至关重要的环节,它能将复杂的数据以直观的图形方式呈现,帮助我们更好地理解数据特征和规律。Python 拥有丰富的可视化库,其中 Matplotlib 是最常用的基础库…

API生命周期10阶段

一、策略规划(Strategy Planning) 核心任务:业务价值对齐、技术路线设计关键产出: API产品蓝图:定义业务领域边界(如支付API域、用户API域)治理规范:《API安全标准》《版本管理策略》…

UGUI源码剖析(9):布局的实现——LayoutGroup的算法与实践

UGUI源码剖析(第九章):布局的实现——LayoutGroup的算法与实践 在前一章中,我们剖析了LayoutRebuilder是如何调度布局重建的。现在,我们将深入到布局核心,去看看那些具体的组件——LayoutGroup系列组件是如…

GitHub PR 提交流程

step1 在 GitHub 上 fork 目标仓库&#xff08;手动操作&#xff09; step2 将 fork 的目标仓库克隆到本地 git clone https://github.com/<your-username>/<repo-name>.git cd <repo-name>step3 与上游目标仓库建立链接 git remote add upstream https://gi…

矿物分类案列 (一)六种方法对数据的填充

目录 矿物数据项目介绍&#xff1a; 数据问题与处理方案&#xff1a; 数据填充策略讨论&#xff1a; 模型选择与任务类型&#xff1a; 模型训练计划&#xff1a; 一.数据集填充 1.读取数据 2.把标签转化为数值 3.把异常数据转化为nan 4.数据Z标准化 5.划分训练集测试…

vue:vue3的方法torefs和方法toref

在 Vue 3 的 Composition API 中,toRef 和 toRefs 是两个用于处理响应式数据的重要工具,它们专门用于从 reactive() 对象中提取属性并保持响应性。 toRef() 作用:将 reactive 对象的单个属性转换为一个 ref 对象,保持与源属性的响应式连接。 使用场景: 需要单独提取 rea…

Android 移动端 UI 设计:前端常用设计原则总结

在 Android 移动端开发中&#xff0c;优秀的 UI 设计不仅需要视觉上的美观&#xff0c;更需要符合用户习惯、提升操作效率的设计逻辑。前端 UI 设计原则是指导开发者将功能需求转化为优质用户体验的核心准则&#xff0c;这些原则贯穿于布局结构、交互反馈、视觉呈现等各个环节。…

计算机网络 TCP三次握手、四次挥手超详细流程【报文交换、状态变化】

TCP&#xff08;传输控制协议&#xff09;是互联网最重要的协议之一&#xff0c;它保证了数据的可靠、有序传输。连接建立时的“三次握手”和连接关闭时的“四次挥手”是其核心机制&#xff0c;涉及特定的报文交换和状态变化。 一、TCP 三次握手&#xff08;Three-Way Handshak…

使用Applications Manager进行 Apache Solr 监控

Apache Solr 为一些对性能极为敏感的环境提供搜索支持&#xff1a;电子商务、企业应用、内容门户和内部知识系统。因此&#xff0c;当出现延迟增加或结果不一致的情况时&#xff0c;用户会立刻察觉。而当这些问题未被发现时&#xff0c;情况会迅速恶化。 Apache Solr 基于 Apa…

Shell脚本-for循环语法结构

一、前言在 Linux Shell 脚本编程中&#xff0c;for 循环 是最常用的控制结构之一&#xff0c;用于重复执行一段命令&#xff0c;特别适用于处理列表、文件、数字序列等场景。本文将详细介绍 Shell 脚本中 for 循环的各种语法结构&#xff0c;包括&#xff1a;✅ 经典 for in 结…

记SpringBoot3.x + Thymeleaf 项目实现(MVC架构模式)

目录 前言 一、创建SpringBoot项目 1. 创建项目 2. 运行项目 二、连接数据库实现登录 1. pom.xml文件引入依赖包 2. application.yml文件配置 3. 数据持久层&#xff0c;mybatis操作映射 4. Service接口及实现 5. Controller代码 6. Thymeleaf页面登录 7. 运行项目…

Java 导出word 实现表格内插入图表(柱状图、折线图、饼状图)--可编辑数据

表格内插入图表导出效果表格内图表生成流程分析 核心问题与解决方案 问题 Word 图表作为独立对象&#xff0c;容易与文本分离位置难以精确控制&#xff0c;编辑时容易偏移缺乏与表格数据的关联性 解决方案 直接嵌入&#xff1a;将图表嵌入表格单元格&#xff0c;确保数据关联精…

北京JAVA基础面试30天打卡12

1.MySQL中count(*)、count(I)和count(字段名)有什么区别&#xff1f; 1**.COUNT ()**是效率最高的统计方式&#xff1a;COUNT()被优化为常量&#xff0c;直接统计表的所有记录数&#xff0c;不依赖字段内容&#xff0c;开销最低。推荐在统计整个表的记录数时使用。 2.**COUNT(1…

【AI】——结合Ollama、Open WebUI和Docker本地部署可视化AI大语言模型

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大三学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

RAG学习(二)

构建索引 一、向量嵌入 向量嵌入&#xff08;Embedding&#xff09;是一种将真实世界中复杂、高维的数据对象&#xff08;如文本、图像、音频、视频等&#xff09;转换为数学上易于处理的、低维、稠密的连续数值向量的技术。 想象一下&#xff0c;我们将每一个词、每一段话、…

亚马逊店铺绩效巡检_影刀RPA源码解读

一、项目简介 本项目是一个基于RPA开发的店铺绩效巡店机器人。该机器人能够自动化地登录卖家后台&#xff0c;遍历多个店铺和站点&#xff0c;收集并分析各类绩效数据&#xff0c;包括政策合规性、客户服务绩效、配送绩效等关键指标&#xff0c;并将数据整理到Excel报告中&…

跨越南北的养老对话:为培养“银发中国”人才注入新动能

2025年8月16日&#xff0c;北京养老行业协会常务副会长陈楫宝一行到访广州市白云区粤荣职业培训学校&#xff0c;受到颐年集团副总李娜的热情接待。此次访问不仅是京穗两地养老行业的一次深度交流&#xff0c;更为推动全国智慧养老体系建设、提升养老服务专业化水平注入了新动能…

Spring IOC 学习笔记

1. 概述Spring IOC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09;是一种设计思想&#xff0c;通过依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;实现。它的核心思想是将对象的创建和依赖关系的管理交给Spring容器&#xff0c;从而降…

揭开Android Vulkan渲染封印:帧率暴增的底层指令

ps&#xff1a;本文内容较干&#xff0c;建议收藏后反复边跟进源码边思考设计思想。壹渲染管线的基础架构为什么叫渲染管线&#xff1f;这里是因为整个渲染的过程涉及多道工序&#xff0c;像管道里的流水线一样&#xff0c;一道一道的处理数据的过程&#xff0c;所以使用渲染管…

HTTP 请求转发与重定向详解及其应用(含 Java 示例)

在 Web 开发中&#xff0c;我们经常需要在不同页面之间跳转&#xff0c;比如登录成功后跳到首页、提交表单后跳到结果页面。这时&#xff0c;常见的两种跳转方式就是 请求转发&#xff08;Request Forward&#xff09; 和 重定向&#xff08;Redirect&#xff09;。虽然它们都能…