Express 的 req 和 res 对象

news2025/6/9 5:32:24

新建 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模板文件。在视图目录中,包含以下内容。

html
  head
    title= title
  body
    h1= 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){
    // 写法1
    res.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.coloradmin.cn/o/1694659.html

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

相关文章

在 Ubuntu 22 上深入了解和搭建 Minikube

在 Ubuntu 22 上深入了解和搭建 Minikube Minikube 是一个开源工具,使开发者能够在本地计算机上运行单节点的 Kubernetes 集群,非常适合于开发、测试和学习 Kubernetes 的基础知识。在这篇文章中,我们将深入了解 Minikube 的工作原理&#x…

【vue echart】完成一个简单echart图表+自适应

实现效果&#xff1a; html&#xff1a; <divref"echartOne"id"echartOne"style"width: 100%; height: 100%" ></div> js: getEchartOne() {let chart this.$echarts.init(this.$refs.echartOne);chart.setOption({title: {text:…

【全部更新完毕】2024电工杯A题数学建模详细思路代码文章分享

A 题&#xff1a;园区微电网风光储协调优化配置 摘要 在全球范围内&#xff0c;气候变化和环境污染问题日益严重&#xff0c;减少碳排放和实现可持续发展成为各国的共同目标。新能源&#xff0c;尤其是风能和光伏发电&#xff0c;因其清洁、可再生的特性&#xff0c;正在全球范…

Python vscode debug: Error while enumerating installed packages.解决

记录一个vscode python debug时出现的错误&#xff1a; 具体错误如下&#xff1a; E00000.030: Error while enumerating installed packages. Traceback (most recent call last): File “/root/.vscode-server/extensions/ms-python.debugpy-2024.0.0-linux-x64/bundled/lib…

【C++11】lambda匿名函数和包装器

目录 一&#xff0c;lambda匿名函数 1-1&#xff0c;lambda的引入 1-2&#xff0c;lambda表达式书写格式 1-3&#xff0c;lambda函数的名称 1-4&#xff0c;lambda捕获列表的使用 1-5&#xff0c;函数对象与lambda表达式 二&#xff0c;包装器 2-1&#xff0c;function…

逻辑这回事(一)----编码规范

说明&#xff1a;优先级是M的规则为强制项&#xff0c;优先级为R的规则为建议项。 通用约束 应有全局观念。 优先级&#xff1a;M 说明&#xff1a;你所编写的代码在成为最终硅片上的一部分之前&#xff0c;需要经过许多设计者利用各种各样的工具进行各种各样的处理。有时&…

【编译原理】LL(1)预测分析法

一、实验目的 LL(1)的含义&#xff1a;第一个L表明自顶向下分析是从左向右扫描输入串&#xff0c;第2个L表明分析过程中将使用最左推导&#xff0c;1表明只需向右看一个符号便可决定如何推导&#xff0c;即选择哪个产生式进行推导。 LL(1) 预测分析方法是确定的自顶向下的语…

[保姆式教程]使用目标检测模型YOLO V8 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)

最近需要做基于卫星和无人机的农业大棚的旋转目标检测&#xff0c;基于YOLO V8 OBB的原因是因为尝试的第二个模型就是YOLO V8&#xff0c;后面会基于YOLO V9模型做农业大棚的旋转目标检测。YOLO V9目前还不能进行旋转目标的检测&#xff0c;需要修改代码 PS:欢迎大家分享农业大…

Capture One Studio for Mac:打造完美影像的利器

对于摄影师而言&#xff0c;每一次按下快门都是一次对完美影像的追求。而Capture One Studio for Mac正是这样一款能够帮助你实现这一追求的利器。 Capture One Studio for Mac v16.4.2.1中文直装版下载 首先&#xff0c;Capture One Studio for Mac拥有出色的图像处理能力。它…

网络初识 二

一、TCP/IP五层协议 -> 应用层 : 传输的数据在应用程序中如何使用 -> 传输层 : 关注的是通信的起点终点 -> 网络层 : 关注的是通信中的路线规划 -> 数据链路层 : 关注的是相邻节点之间的通信细节 -> 物理层 : 网络通信的基础设施 说是五层,实际上下面…

【Python搞定车载自动化测试】——Python实现CAN总线Bootloader刷写(含Python源码)

系列文章目录 【Python搞定车载自动化测试】系列文章目录汇总 文章目录 系列文章目录&#x1f4af;&#x1f4af;&#x1f4af; 前言&#x1f4af;&#x1f4af;&#x1f4af;一、环境搭建1.软件环境2.硬件环境 二、目录结构三、源码展示1.诊断基础函数方法2.诊断业务函数方法…

GmSSL3.X编译iOS和Android动态库

一、环境准备 我用的Mac电脑编译&#xff0c;Xcode版本15.2&#xff0c;安卓的NDK版本是android-ndk-r21e。 1.1、下载国密源码 下载最新的国密SDK源码到本地。 1.2、安装Xcode 前往Mac系统的AppStore下载安装最新Xcode。 1.3、安卓NDK下载 下载NDK到本地&#xff0c;选…

leetcode每日一题第八十九天

class Solution { public:int subarraySum(vector<int>& nums, int k) {unordered_map<int,int> mp;mp[0] 1;int count 0,pre 0;for(auto x:nums){pre x;if(mp.find(pre-k) ! mp.end()){count mp[pre-k];}mp[pre];}return count;} };

OSM最新台湾电力数据(2024年5月23日数据)转换总结及与(2024年2月16日数据)转换结果对比

osm包含种类繁多&#xff0c;我们这里是只以刚转换的台湾电力设备为例抛砖引玉的进行说明。本次仅仅转换了&#xff0c;变电站、电厂和线路杆塔数据&#xff01; 这种带增强的文件&#xff0c;是我在基础规则之外增加的提取规则。是为了更多的将OSM相关类型数据过滤提取出来&am…

Meta发布Chameleon模型预览,挑战多模态AI前沿

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

LeetCode 279 —— 完全平方数

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此图利用动态规划进行求解&#xff0c;首先&#xff0c;我们求出小于 n n n 的所有完全平方数&#xff0c;存放在数组 squareNums 中。 定义 dp[n] 为和为 n n n 的完全平方数的最小数量&#xff0c;那么有状态…

基于Llama 3搭建中文版(Llama3-Chinese-Chat)大模型对话聊天机器人

前面两篇博文&#xff0c;我们分别在个人笔记本电脑部署了Llama 3 8B参数大模型&#xff0c;并使用Ollama搭建了基于 Web 可视化对话聊天机器人&#xff0c;可以在自己电脑上愉快的与Llama大模型 Web 机器人对话聊天了。但在使用过程中&#xff0c;笔者发现Llama大模型经常出现…

【IC设计】牛客网-序列检测习题总结

文章目录 状态机基础知识VL25 输入序列连续的序列检测VL26 含有无关项的序列检测VL27 不重叠序列检测VL28 输入序列不连续的序列检测参考资料 状态机基础知识 VL25 输入序列连续的序列检测 timescale 1ns/1ns module sequence_detect(input clk,input rst_n,input a,output re…

乡村振兴的乡村环境治理与保护:加强乡村环境治理与保护,改善乡村环境质量,打造美丽宜居的乡村环境

一、引言 随着乡村振兴战略的深入实施&#xff0c;乡村环境治理与保护成为推动乡村全面振兴的关键环节。乡村环境是乡村发展的重要基础&#xff0c;关系到农民的生产生活和身心健康&#xff0c;也直接影响到乡村经济的可持续发展。因此&#xff0c;加强乡村环境治理与保护&…

Stable Diffusion——U-ViT用于扩散建模的 ViT 主干网

1.概述 扩散模型是最近出现的强大的深度生成模型&#xff0c;可用于生成高质量图像。扩散模型发展迅速&#xff0c;可应用于文本到图像生成、图像到图像生成、视频生成、语音合成和 3D 合成。 除了算法的改进&#xff0c;骨干网的改进在扩散建模中也发挥着重要作用。一个典型…