Express 的 req 和 res 对象

新建 learn-express文件夹,执行命令行

npm init -y
npm install express

新建 index.js

const express = require('express');
const app = express();app.get('/', (req, res, next) => {res.json('return get')
})app.post('/', (req, res, next) => {res.json('return post')
})app.listen(3000, () => {console.log('listen to 3000')
});

执行命令 nodemon ./index.js 。(nodemon是一个监视文件变化并自动重启应用程序的工具)

到 Postman 访问如下,都没有问题。

req

get

在 get 路由里打印一些开发中经常用到的属性,Postman发送get请求查询各属性信息:localhost:3000/info/123?name=jiawei

app.get('/info/:id', (req, res, next) => {console.log('req.headers:', req.headers)console.log('req.ip:', req.ip)console.log('req.method:', req.method)console.log('req.protocol:', req.protocol)console.log('req.hostname:', req.hostname)console.log("req.url:", req.url)console.log('req.path:', req.path)console.log('req.query:', req.query)console.log('req.params:', req.params)res.json('return get')
})
// 请求结果:
req.headers: {'user-agent': 'PostmanRuntime/7.39.0',accept: '*/*','postman-token': '4528f659-597c-4c09-a979-a1ddc97cb70c',host: 'localhost:3000','accept-encoding': 'gzip, deflate, br',connection: 'keep-alive'
}
req.ip: ::1
req.method: GET
req.protocol: http
req.hostname: localhost
req.url: /info/123?name=jiawei
req.path: /info/123
req.query: { name: 'jiawei' }
req.params: { id: '123' }

这个 ::1 是IPV6环回地址,代表我当前机器。 

post

在Postman 使用 raw 的 json 格式发送post请求。

因为传过来的的是json,需要一个中间件来解析,添加代码 app.use(express.json()) 。 

app.use(express.json());
app.post('/', (req, res, next) => {console.log('req.body:', req.body)res.json('return post')
})
// 打印结果
req.body: { name: 'jiawei', age: 18 }

 如果换成 x-www-form-urlencoded 格式发送post请求,也需要中间件解析。

// extended: true 使用 queryString 库解析
// extended: false 使用 qs 库解析
app.use(express.urlencoded({ extended: true }));
// 打印结果
req.body: { name: 'jiawei', age: '18' }

res

res对象表示Express应用程序在收到HTTP请求时发送的HTTP响应。一些常用属性如下,更多详细内容移步官网查看。

res.json()

发送一个JSON响应,参数可以是任何JSON类型,包括对象、数组、字符串、布尔值、数字或null等等。

res.json(null)
res.json({ name: 'jiawei' })
res.status(500).json({ error: 'message' })

res.end()

用于在没有返回任何数据的情况下快速结束响应。如果需要用数据来响应,可以使用res.send()和res.json()等方法。

res.end()
res.status(404).end()

res.jsonp()

发送具有JSONP支持的JSON响应。JSONP默认回调名为callback,也可以通过设置 'jsonp callback name' 覆盖。具体例子。

res.jsonp({ name: 'jiawei' })
// => callback({ "name": "jiawei" })// ?callback=foo
res.jsonp({ name: 'jiawei' })
// => foo({ "name": "jiawei" })app.set('jsonp callback name', 'cb')
// ?cb=foo
res.jsonp({ "name": "jiawei" })
// => foo({ "name": "jiawei" })

res.render()

渲染视图,并将渲染后的HTML字符串发送给客户端。实践一下官网的例子。

安装模板引擎npm包Pug

npm install pug --save
// 设置模板文件目录
app.set('views', './views')
// 设置视图引擎
app.set('view engine', 'pug')

创建一个名为index的Pug模板文件。在视图目录中,包含以下内容。

htmlheadtitle= titlebodyh1= message

创建一个路由来渲染 index.pug

app.get('/', function (req, res) {res.render('index', { title: 'Hey', message: 'Hello Express!' })
})

res.status()

设置响应的HTTP状态。它是 Node 的 response.statusCode 的一个可链接别名。

res.status(403).end()
res.status(400).send('Bad Request')
res.status(404).sendFile('/absolute/path/to/404.png')

res.get()

返回由字段指定的HTTP响应头。匹配不区分大小写。

res.set('Content-Type', 'application/json')
console.log('Content-Type:',res.get('Content-Type'))
console.log('content-type:', res.get('content-type'))
// 打印结果
Content-Type: application/json; charset=utf-8
content-type: application/json; charset=utf-8

res.set()

将响应的HTTP头字段设置为value。要一次设置多个字段可以传递一个对象作为参数。别名为res.header。

app.post('/', function (req, res, next){// 写法1res.set('Content-Type', 'application/json')res.set('My-Name', 'jiawei')res.set('My-Age', 18)// 写法2// res.set({//     'Content-Type': 'application/json',//     'My-Name': 'jiawei',//     'My-age': 18// })// 写法3// res.header('Content-Type', 'application/json')// res.header('My-Name', 'jiawei')// res.header('My-Age', 18)// 写法4// res.header({//     'Content-Type': 'application/json',//     'My-Name': 'jiawei',//     'My-age': 18// })console.log(res.get('content-type'))console.log(res.get('My-Name'))console.log(res.get('My-Age'))console.log(res.getHeaders())res.end()
})
// 打印结果
application/json; charset=utf-8
jiawei
18
[Object: null prototype] {'x-powered-by': 'Express','content-type': 'application/json; charset=utf-8','my-name': 'jiawei','my-age': '18'
}

res.download()

根目录下新建test.text,随意输入内容,例如“我是文本”。创建一个路由来处理下载请求。

app.get('/download', function (req,res, next) {res.download('/test.txt')
})

 Postman发起请求可以看到文本内容的,在浏览器中访问可以下载到该文件。

 

 res.download 可自定义文件名和接收回调函数。

// 自定义下载后的文件名为 report.pdf
res.download('/report-12345.pdf', 'report.pdf')
// 还可以接收回调函数,该函数在传输完成或发生错误时调用
res.download('/report-12345.pdf', 'report.pdf', function (err) {if (err) {// 处理错误,但请记住响应可能是部分发送的// 因此检查 res.headersSent} else {// 下载成功后,减少一个下载积分等等}
})

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

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

相关文章

论文精读-SRFormer Permuted Self-Attention for Single Image Super-Resolution

论文精读-SRFormer: Permuted Self-Attention for Single Image Super-Resolution SRFormer:用于单图像超分辨率的排列自注意 Params:853K,MACs:236G 优点: 1、参考SwinIR的RSTB提出了新的网络块结构PAB(排列自注意力…

sky walking日志采集以及注意事项

文章目录 1,sky walking日志采集功能概述2,采集log4j2日志3,采集logback日志4,效果展示5,注意事项 1,sky walking日志采集功能概述 在介绍Sky walking日志采集功能之前,最好在系统学习一遍日志…

【医学AI|顶刊精析|05-25】哈佛医学院·告别切片局限:3D病理如何革新癌症预后

小罗碎碎念 先打个预防针,我写这篇推文用了两个多小时,这就意味着要读懂这篇文章不太容易,我已经做好反复阅读的准备了。不过,风险之下,亦是机会,读懂的人少,这个赛道就越值得押宝。 在正式阅…

【C语言】8.C语言操作符详解(3)

文章目录 10.操作符的属性:优先级、结合性10.1 优先级10.2 结合性 11.表达式求值11.1 整型提升11.2 算术转换11.3 问题表达式解析11.3.1 表达式111.3.2 表达式211.3.3 表达式311.3.4 表达式411.3.5 表达式5: 11.4 总结 10.操作符的属性:优先级、结合性 …

基于Keras的手写数字识别(附源码)

目录 引言 为什么要创建虚拟环境,好处在哪里? 源码 我修改的部分 调用本地数据 修改第二层卷积层 引言 本文是博主为了记录一个好的开源代码而写,下面是代码出处!强烈建议收藏!【深度学习实战—1】&#xff1a…

【spring】@ControllerAdvice注解学习

ControllerAdvice介绍 ControllerAdvice 是 Spring 框架提供的一个注解,用于定义一个全局的异常处理类或者说是控制器增强类(controller advice class)。这个特性特别适用于那些你想应用于整个应用程序中多个控制器的共有行为,比…

ctfhub中的SSRF的相关例题(下)

目录 URL Bypass 知识点 相关例题 数字IP Bypass 相关例题 方法一:使用数字IP 方法二:转16进制 方法三:用localhost代替 方法四:特殊地址 302跳转 Bypass ​编辑 关于localhost原理: DNS重绑定 Bypass 知识点&…

ant design pro 6.0搭建教程

一、搭建 环境: Node.js 18.16.1 ant design pro 6.0 注意:选择umi3时,使用node.js 18版本的会报错,可以实践一下,这里就不再进行实践了。 umi3需要版本是低于node.js 18的 node下载地址: https://nodejs.…

可重构柔性装配产线,为智能制造领域带来了新的革命性变革

随着科技的飞速发展,个性化需求逐渐成为市场的主导。在这个充满变革的时代,制造业正面临着前所未有的挑战和机遇。如何快速响应市场需求、提高生产效率、保证产品质量,成为每一家制造企业必须思考的问题。 在这样的背景下,富唯智…

免费插件集-illustrator插件-Ai插件-文本对象和文本段落互转

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件,加强illustrator使用人员工作效率,进行文本对象和文本段落互转。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/878…

00.OpenLayers快速开始

00OpenLayers快速开始 官方文档: 快速开始:https://openlayers.org/doc/quickstart.html 需要node环境 一、设置新项目 npm create ol-app my-app cd my-app npm start第一个命令将创建一个名为 my-app​ 的目录(如果您愿意,…

Java——简易图书管理系统

本文使用 Java 实现一个简易图书管理系统 一、思路 简易图书管理系统说白了其实就是 用户 与 图书 这两个对象之间的交互 书的属性有 书名 作者 类型 价格 借阅状态 而用户可以分为 普通用户 管理员 使用数组将书统一管理起来 用户对这个数组进行操作 普通用户可以进…

有趣的css - 圆形背景动效多选框

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是用 css 实现一个圆形背景动效多选框,适用提醒用户勾选场景,突出多选框选项,可以有效增加用户识别度。 最新文章通过公众号「设计师工作日常」发布…

VBA批量合并带有图片、表格与文本框的Word

本文介绍基于VBA语言,对大量含有图片、文本框与表格的Word文档加以批量自动合并,并在每一次合并时添加分页符的方法。 在我们之前的文章基于Python中docx与docxcompose批量合并多个Word文档文件并逐一添加分页符(https://blog.csdn.net/zhebu…

helloworld 可执行程序得到的过程

// -E 预处理 开发过程中可以确定某个宏 // -c 把预处理 编译 汇编 都做了,但是不链接 // -o 指定输出文件 // -I 指定头文件目录 // -L 指定链接库文件目录 // -l 指定链接哪一个库文件 #include <stdio.h> #include <stdlib.h> #include <string.h>int mai…

【微积分】CH16 integrals and vector fields听课笔记

【托马斯微积分学习日记】13.1-线积分_哔哩哔哩_bilibili 概述 16.1line integrals of scalar functions [中英双语]可视化多元微积分 - 线积分介绍_哔哩哔哩_bilibili 16.2vector fields and line integrals&#xff1a; work circulation and flux 向量场差不多也是描述某种…

gpt-4o继续迭代考场安排程序 一键生成考场清单

接上两篇gpt-4o考场安排-CSDN博客&#xff0c;考场分层次安排&#xff0c;最终exe版-CSDN博客 当然你也可以只看这一篇。 今天又添加了以下功能&#xff0c;程序见后。 1、自动分页&#xff0c;每个考场打印一页 2、添加了打印试场单页眉 3、添加了页脚 第X页&#xff0c;…

Leetcode刷题笔记1:数组基础1

导语 leetcode刷题笔记记录&#xff0c;本篇博客记录数组基础1部分的题目&#xff0c;主要题目包括&#xff1a; Leetcode 704 二分查找Leetcode 27 移除元素 知识点 二分查找 原理 二分查找的适用对象为有序数组且数组中无重复元素&#xff0c;其主要原理是每次都从有序…

AI视频教程下载:全面掌握ChatGPT和LangChain开发AI应用(附源代码)

这是一门深入的课程&#xff0c;涉及ChatGPT、LangChain和Python。打造专注于现实世界AI集成的AI应用&#xff0c;课件附有每一节涉及到的源代码。 **你将学到什么&#xff1a;** - 将ChatGPT集成到LangChain的生产风格应用中 - 使用LangChain组件构建复杂的文本生成管道 - …

推荐五个线上兼职,在家也能轻松日入百元,适合上班族和全职宝妈

在这个瞬息万变的时代&#xff0c;你是否也曾考虑过在繁忙的工作之外&#xff0c;寻找一份兼职副业来补贴家用&#xff0c;同时保持生活的多样性&#xff1f;别急&#xff0c;现在就让我为你揭秘五个可靠的日结线上兼职岗位&#xff0c;助你轻松迈向财务自由之路&#xff01; 一…