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的各个方面。
大家有任何问题都可以在评论区留言交流,相互学习!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PlatformIO中ESP8266使用GxEPD库和U8G2库驱动 2.9寸黑白墨水屏显示中文

Content 0. 前言1. 安装platformIO环境2. 新建工程3. 添加外部库4. 修改U8g2_for_Adafruit_GFX库5. 代码和烧录 0. 前言 墨水屏是黄鱼淘的,效果还不错。 U8G2库一直编译不进去,显示汉字始终不太美观,个人一直不太喜欢汉字取模的方法&#x…

字节、字符与字符编码的区别与联系

字节、字符与字符编码的区别与联系 字节 位(bit)是计算机中信息的最小单元。位是由电路实现的,硬件底层使用数字电路,以电压的高低作为记录信息的方式:较高的电压表示数值“1”,较低的电压表示数字“0”。因此,一个位…

微信预约挂号系统源码,公众服务号(小程序)预约挂号,适用于各级公立和民营医院,用来搭建互联网医院平台,可对接院内his、lis、pacs系统

掌上智慧医院、公众服务号(小程序)预约挂号、互联网平台源码 系统介绍 “移动智慧医院”平台既可以让患者足不出户就可以利用微信进行在线挂号,实现分时段就诊,就诊后也可以直接使用手机微信缴费,还可以通过微信实现查…

NFS网络共享存储服务技术攻略

目录 一.NFS 1.定义 2.特点 3.原理 二.服务端NFS配置文件 1.主配置文件 2.文件格式 3.相关命令 三.实验:NFS共享存储服务配置 1.服务端安装nfs-utils和rpcbind软件包 2.服务端新建共享目录给权限 3.服务端修改配置文件/etc/exports 4.服务端关闭防火墙…

FlinkAPI开发之水位线(Watermark)

案例用到的测试数据请参考文章: Flink自定义Source模拟数据流 原文链接:https://blog.csdn.net/m0_52606060/article/details/135436048 Flink中的时间语义 哪种时间语义更重要 从《星球大战》说起 数据处理系统中的时间语义 在实际应用中&#xff0c…

CC工具箱使用指南:【获取所有字段信息】

一、简介 这个工具的目的简单易懂,就是获取选定要素图层的所有字段信息。 本身不对要素图层作任何处理,只是一个查看属性的工具。 问我要用在什么地方,我也不知道-_- 二、工具参数介绍 点击【信息获取】组里的【获取所有字段信息】工具&a…

解决flask中jinja2插值变量变成字符串的办法

今天在通过使用{{ variable_name }}这种方式插入html内容时,发现变量内容到了页面中全部变成了字符串, python代码: return render_template(FilePath.file_path_to_page,md_contenthtml_content # 返回html内容 )html代码中插入&#xff1…

【运维杂谈】为什么docker镜像推送至harbor上就变小了?

为什么docker镜像推送至harbor上就变小了?我们以一个游戏镜像为例,在Linux显示295MB。 [rootWorker232 ~]# docker images | grep v0.6 harbor.koten.com/koten-games/games v0.6 30ec3e6e4747 25 hours ago 295MB […

C# Cad2016二次开发HelloWorld(一)

1 新建类库 二 引用 acdbmgd.dll、acmgd.dll、accoremgd.dll 三 HelloWorld代码 public class Class1{/// <summary>/// 程序入口标识/// </summary>[CommandMethod("HelloWorld")]public void HelloWorld(){Document adoc Autodesk.AutoCAD.Applicatio…

presto 支持regexp_count

一、背景 1、查询regexp_count 函数提示未注册 用户想正则查询特定字符出现次数 function regexp_count not registered 二、调研 1、官网地址&#xff1a; Presto Documentation — Presto 0.284 Documentation 2、regexp_extract_all Regular Expression Functions —…

如何为 SEO 进行关键字研究

什么是关键词研究&#xff1f; 关键字研究是查找和分析理想网站访问者输入搜索引擎的关键字的过程。这使您能够在内容策略中定位最有效的关键字。 关键字是人们用来在搜索引擎中查找信息或产品的单词或短语。例如&#xff0c;如果您想为您的小狗购买食物&#xff0c;您可以在…

最简单爱心的解析

首先你需要了解爱心代码在直角坐标系的方程 数学知识&#xff1a;x 属于 -1.5 ~ 1.5 y 属于 -1 ~ 1.5 和 高中所学的线性规划 请看代码 #include <math.h> #include <stdlib.h> #include <Windows.h> #include <stdio.h> int main() { …

迅软科技丨IT企业如何应对数据泄密危机?

随着信息技术的快速发展&#xff0c;软件IT行业面临着前所未有的数据安全挑战。黑客攻击、病毒传播、内部泄密等安全威胁层出不穷&#xff0c;给企业的核心资产和运营带来严重威胁。同时&#xff0c;国家对于数据安全的法律法规也日益严格&#xff0c;要求企业必须采取更加有效…

【转载】MyBatisCodeHelperPro最新版使用教程

在开发中编写生成bean&#xff0c;mapper&#xff0c;mapper.xml费时也费力&#xff0c;可以通过MyBatisCodeHelper-Pro自动生成bean&#xff0c;dao&#xff0c;mapper.xml等文件。 MyBatisCodeHelper-Pro是IDEA下的一个插件&#xff0c;类似于mybatis plugin&#xff0c;但可…

iPhone是国内最畅销的智能手机

据调研机构BCI发布最新数据显示&#xff0c;去年中国一共卖出2.7亿部智能手机&#xff0c;其中&#xff0c;苹果的iPhone系列是国内最畅销的机型。 其中&#xff0c;苹果以17.1%的市场份额占据了第一&#xff0c;而vivo手机和OPPO则以16.7%和16%紧随其后&#xff0c;接着是荣耀…

【C#】面向对象的三大特性,还记得吗,简单代码举例回顾

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

论文阅读 Vision Transformer - VIT

文章目录 1 摘要1.1 核心 2 模型架构2.1 概览2.2 对应CV的特定修改和相关理解 3 代码4 总结 1 摘要 1.1 核心 通过将图像切成patch线形层编码成token特征编码的方法&#xff0c;用transformer的encoder来做图像分类 2 模型架构 2.1 概览 2.2 对应CV的特定修改和相关理解 解…

程序员应该学习的 10 件事

程序员应该学习的 10 件事&#xff08;省流版&#xff09; 翻译&#xff1a;10 Things Software Developers Should Learn about Learning 原文&#xff1a;https://cacm.acm.org/magazines/2024/1/278891-10-things-software-developers-should-learn-about-learning/fulltex…

【教学类-43-21】完结篇 16宫格(4*4可算全部数字)

作品展示&#xff1a; 16宫格里面的4*4小格子可以凑满1-16&#xff0c;旁边的7宫格格2份 背景需求&#xff1a; 做完了1-20宫格的A4模板&#xff0c;最后做一个16宫格小格子&#xff08;附加7宫格2套&#xff09;的样式&#xff0c;只有4宫格&#xff08;2*2&#xff09;、9宫…

vue3二次封装element-ui中的table组件

为什么要做这件事 借助封装table组件的过程来巩固一下vue3相关知识点。 组件有哪些配置项 options:表格的配置项data: 表格数据源elementLoadingText&#xff1a;加载文案elementLoadingSpinner&#xff1a;加载图标elementLoadingBackground&#xff1a;背景遮罩的颜色elem…