30天精通Nodejs--第十七天:express-路由配置

目录

  • 引言
  • 基础路由配置
  • 路由参数与查询参数
  • 路由前缀与子路由
  • 路由重定向
  • 结语

引言

上篇文章我们简单介绍了express的基础用法,包括express的安装、创建路由及项目启动,对express有了一个基础的了解,这篇开始我们将详细介绍express的一些高级用法。
本篇文章介绍express的路由配置的用法。

基础路由配置

上篇文章中我们在hello world中写了一个简单的get请求,除了get请求方式,还支持post、put、delete。

const express = require('express')
// 创建express应用
const app = express()
// 占用端口号
const port = 3000// 创建一个接口,访问路径为'/'
app.get('/', (req, res) => {res.send('Hello World!')
})// 创建一个接口,访问路径为'/'
app.post('/login', (req, res) => {const userName = req.body.name// 这里可以处理用户创建逻辑res.json({ message: `${userName}登录成功` });
})// 将应用绑定到端口号
app.listen(port, () => {console.log(`应用占用的端口: ${port}`)
})

浏览器无法直接发送除了get以外的其他请求,所以我们使用postman进行测试
在这里插入图片描述

路由参数与查询参数

Express支持在路由路径中定义动态参数,这些参数会被作为属性添加到req.params对象上:

// 动态路由参数
app.get('/users/:userId', (req, res) => {const userId = req.params.userId;// 根据userId获取并返回用户信息res.json({message: `用户id:${userId}`})
});// 查询参数(query params)
app.get('/search', (req, res) => {const q = req.query.q; // 获取查询参数q// 根据searchTerm执行搜索操作res.json({message: `查询参数:${q}`})
});

在这里插入图片描述
在这里插入图片描述

路由前缀与子路由

为了更好地组织项目结构,Express允许通过express.Router()创建可嵌套的路由实例,用于实现具有共同前缀的路由集合或二级路由:
首先我们创建一个子路由文件user.js

const express = require('express')
const router = express.Router();router.get('/', (req, res) => {res.json({message: 'user get 请求'})
}); // /catalog
router.post('/search', (req, res) => {res.json({})
});module.exports = router

在index.js添加如下代码:

app.use('/user', require('./user'))

这样所有/user前缀的请求都会路由到user.js里面

在这里插入图片描述

路由重定向

Express还支持路由间的重定向:

// 重定向路由
app.get('/old-path', (req, res) => {res.redirect(301, '/user'); 
});

请求/old-path的接口会被重定向到/user
在这里插入图片描述

结语

Express的路由配置提供了灵活且强大的方式来构建复杂的Web应用,包括但不限于处理不同类型的HTTP请求、管理动态路径参数、以及组织多个层级的路由结构。通过对路由配置的深入了解和实践,你可以更高效地设计和维护你的Node.js Express应用程序。

Express 模块的更多用法可以查阅官方文档。

切记:多写代码。
在接下来的文章中,我们将继续深入探讨Node.js的各个方面。
大家有任何问题都可以在评论区留言交流,相互学习!

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

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

相关文章

IDEA—初始化配置

注:以下红框圈的部分,均为已设置好的 外观与行为 编辑器 高级设置 按两次 shift 弹出提示问题解决

【WPF.NET开发】WPF中的拖放

本文内容 WPF 中的拖放支持数据传输拖放事件实现拖放拖放示例 本主题概述 Windows Presentation Foundation (WPF) 应用程序中的拖放支持。 拖放通常指一种数据传输方法:使用鼠标(或一些其他指针设备)选择一个或多个对象,将其拖…

神经网络|张量tensor(待完善)

文章目录 tensor/张量什么是tensor?如何用代码实现tensortensor在神经网络中的应用 其他 tensor/张量 什么是tensor? 张量是用来探究一个点在各个切面(一共三个切面)和各个方向(x,y,z三个方向&…

蚁群算法(ACO)解决旅行商(TSP)问题的python实现

TSP问题 旅行商问题(Travelling Salesman Problem, 简记TSP,亦称货郎担问题):设有n个城市和距离矩阵D [dij],其中dij表示城市i到城市j的距离,i, j 1, 2 … n,则问题是要找出遍访每个城市恰好一次的一条回…

【kafka】记录用-----------1

主题(topic):消息的第一次分类 根据人为的划分条件将消息分成不同的主题 主题的划分是人为的根据不同的任务情景去划分 比如,我们有两个主题,一个是"订单",另一个是"库存"。每个主题代…

Java集成消息队列Kafka

1.Kafka maven坐标 在使用Maven构建Java项目时&#xff0c;你可以通过添加Kafka的Maven依赖来引入Kafka相关的库。下面是Kafka的Maven坐标&#xff1a; <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId&g…

SpringCloud + Redis 实现Api接口限流 防止恶意刷接口

一、API接口防刷 顾名思义&#xff0c;想让某个接口某个人在某段时间内只能请求N次。 二、原理 在请求的时候&#xff0c;服务器通过Redis记录你请求的次数&#xff0c;如果次数超过限制就不给访问。 在redis保存的key是有失效的&#xff0c;过期就会删除。 三、api限流的场…

GPT-4:智能语言模型的新篇章

随着人工智能技术的飞速发展&#xff0c;智能语言模型已经成为了我们日常生活和工作中不可或缺的一部分。GPT-4&#xff0c;作为最新一代的语言模型&#xff0c;不仅继承了前代技术的优势&#xff0c;还在理解深度、生成连贯性和创造性方面实现了质的飞跃。本文将探讨GPT-4的创…

强化学习应用(二):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个价值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

【JAVA】谈谈 ReadWriteLock 和 StampedLock

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 ReadWriteLock&#xff08;读写锁&#xff09; 基本原理&#xff1a; 接口和实现&#xff1a; 用法示例&#xff1a; StampedL…

电梯导轨市场分析:我国市场销量增长率约为2.4%

电梯导轨(The elevator guide rail)是由钢轨和连接板构成的电梯构件&#xff0c;分为轿厢导轨和对重导轨。从截面形状分为T形&#xff0c;L形和空心三种形式。导轨在起导向作用的同时&#xff0c;承受轿厢&#xff0c;电梯制动时的冲击力&#xff0c;安全钳紧急制动时的冲击力等…

javacv和opencv对图文视频编辑-用多张图片合成MP4视频

狠人话不多&#xff0c;直接上代码 package com.bitar.javavideo.test;import org.bytedeco.ffmpeg.global.avcodec; import org.bytedeco.ffmpeg.global.avutil; import org.bytedeco.javacv.FFmpegFrameRecorder; import org.bytedeco.javacv.Java2DFrameConverter;import j…

Camunda Cluster

Rest API&#xff1a;无状态&#xff0c;根据权重路由。控制台API&#xff1a;webapp 登录有状态&#xff0c;根据IP路由。 nginx.conf upstream rest_proxy {server localhost:8080 weight1;server localhost:8081 weight1;server localhost:8082 weight1; }upstream webapp…

《2024 年 Web3.0 数字资产趋势报告》(二)

撰文&#xff1a;方军、周芳鸽、李祺虹、张睿彬&#xff0c;Uweb 编辑&#xff1a;Nona&#xff0c;Techub News 点击关注公众号获取完整报告 接下来我们将继续和大家分享《2024 年 Web3.0 数字资产趋势报告》中其余部分。

PyCharm连接服务器(利用PyCharm实现远程开发)

利用PyCharm实现远程开发 注&#xff1a;该功能只有在PyCharm专业版下才可以使用&#xff0c;并且必须是官方的正版许可&#xff0c;破解版的是不可以使用的&#xff01;&#xff01;&#xff01;可以通过免费教育许可申请使用权限&#xff08;申请流程&#xff09;。 pycharm…

QEMU源码全解析 —— PCI设备模拟(6)

接前一篇文章&#xff1a; 上一回讲到了pci_edu_realize函数中的pci_register_bar函数&#xff0c;本回对于其进行详细解析。 再次贴出pci_register_bar函数源码&#xff0c;在hw/pci/pci.c中&#xff0c;代码如下&#xff1a; void pci_register_bar(PCIDevice *pci_dev, in…

在Java中正确使用Optional

Optional类是在Java 8中引入的&#xff0c;用于解决NullPointerException的问题。 java.util.Optional类是一个泛型类型的类&#xff0c;只包含一个类型为T的值。其目的是提供对可能为null的类型T的引用对象的更安全的替代方案。但是&#xff0c;只有在正确使用的情况下&#…

HarmonyOS开发FA应用模型下多个页面的声明方式

目录 方式1 方式2 HarmonyOS配套的IDE是DevEco Studio&#xff0c;目前的版本是3.1。官网可以直接下载 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 ​ 方式1 ​在DevEco Studio如果是在pages目录通过右键New->ArkTS File生成的文件&#xff0c;需要注意&…

Android 13(T) - Media框架(3)- mediaserver

上一节我们了解到android_media_MediaPlayer.cpp中封装的是MediaPlayer native实现&#xff0c;这一节我们就来了解它的内部实现。 1、MediaPlayer MediaPlayer native代码位于frameworks/av/media/libmedia/mediaplayer.cpp 先来看MediaPlayer的声明&#xff0c;它继承于BnM…