当前位置: 首页 > article >正文

前端笔记:路由

从项目直接学习前端
alfa-leetcode-api
对这个项目很感兴趣,正好Copilot免费了,可以直接在github上学习
在这里插入图片描述
路由就是URL到函数的映射。
理解Web路由(浅谈前后端路由与前后端渲染)
AI解释(不保证对)
没问题,我来详细解释一下什么是路由。

在 Web 开发中,路由(Routing)是指将用户请求的 URL 映射到特定的代码处理程序或控制器上。简单来说,路由决定了当用户访问某个网址时,服务器应该如何响应。

路由的作用

  1. 请求处理: 当用户访问一个 URL 时,路由会将这个请求分配给相应的处理函数或控制器。
  2. URL 结构: 路由定义了应用程序的 URL 结构,使得不同的 URL 可以对应不同的功能。
  3. 参数传递: 路由可以从 URL 中提取参数,并传递给处理函数。

路由的基本概念

  • 路径(Path):URL 中的具体路径,例如 /user, /profile/:username
  • HTTP 方法(HTTP Methods):定义请求的类型,例如 GET, POST, PUT, DELETE 等。
  • 处理函数(Handler Function):当路由匹配时执行的代码逻辑,通常是一个函数。

在 Express.js 中的路由示例

假设你有一个简单的 Express.js 应用程序,你想要处理用户访问 /hello 路径时的请求。

  1. 安装 Express.js

    npm install express
    
  2. 创建一个简单的服务器并定义路由

    // 引入 Express 模块
    const express = require('express');
    const app = express();
    
    // 定义一个 GET 路由
    app.get('/hello', (req, res) => {
      res.send('Hello, World!');
    });
    
    // 启动服务器,监听端口 3000
    const PORT = 3000;
    app.listen(PORT, () => {
      console.log(`Server is running on http://localhost:${PORT}`);
    });
    
  3. 运行服务器

    node app.js
    

    现在,当你在浏览器中访问 http://localhost:3000/hello 时,服务器会响应并返回 Hello, World!

复杂路由示例

假设你想处理带参数的 URL,例如 /user/:username,并返回指定用户的资料。

// 引入 Express 模块
const express = require('express');
const app = express();

// 定义一个带参数的 GET 路由
app.get('/user/:username', (req, res) => {
  const username = req.params.username;  // 从 URL 中提取参数
  res.send(`User profile for ${username}`);
});

// 启动服务器,监听端口 3000
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});

当你访问 http://localhost:3000/user/yang-Alice 时,服务器会响应并返回 User profile for yang-Alice

总结

  • 路由 是将 URL 请求映射到处理函数的过程。
  • 路径HTTP 方法 是路由的基本组成部分。
  • 处理函数 定义了当路由匹配时应该执行的代码逻辑。

希望这些解释能帮助你理解路由的概念。如果还有问题,随时告诉我!

了解了。我们可以在本地运行这个项目,而不使用 Docker。请按照以下步骤操作:

  1. 克隆仓库

    git clone https://github.com/alfaarghya/alfa-leetcode-api.git
    cd alfa-leetcode-api
    
  2. 安装依赖
    确保你已经安装了 Node.js 和 npm,然后运行以下命令安装项目依赖:

    npm install
    
  3. 运行项目
    使用以下命令启动项目:

    npm start
    
  4. 实现一个简单的端点
    以获取用户资料详情的端点(GET /:username)为例。我们可以在项目的 src 目录下创建适当的路由和控制器。
    以下是完整的示例代码,包括如何配置和测试路由:

1. 创建 Express 应用程序

首先,确保你有以下文件结构:

project/
├── src/
│   ├── controllers/
│   │   └── userController.ts
│   └── routes.ts
├── app.ts
├── package.json
└── tsconfig.json

2. 安装依赖

确保你已经安装了 Node.js 和 npm,然后在项目根目录下运行以下命令安装依赖:

npm init -y
npm install express typescript ts-node @types/node @types/express node-fetch

3. 配置 TypeScript

在项目根目录下创建 tsconfig.json 文件,内容如下:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "outDir": "./dist"
  },
  "include": ["src/**/*.ts", "app.ts"],
  "exclude": ["node_modules"]
}

4. 实现路由和控制器

src/routes.ts
import express from 'express';
import { getUserProfile } from './controllers/userController';

const router = express.Router();

// 定义带参数的 GET 路由
router.get('/user/:username', getUserProfile);

export default router;
src/controllers/userController.ts
import { Request, Response } from 'express';
import fetch from 'node-fetch';

export const getUserProfile = async (req: Request, res: Response) => {
  const { username } = req.params;
  // 模拟获取用户资料的逻辑
  const userProfile = await fetchUserProfile(username);
  res.json(userProfile);
};

const fetchUserProfile = async (username: string) => {
  // 模拟从 LeetCode API 获取用户资料的逻辑
  // 示例:
  const response = await fetch(`https://leetcode.com/api/user/${username}`);
  const data = await response.json();
  return data;
};

5. 创建主应用程序文件

app.ts
import express from 'express';
import router from './src/routes';

const app = express();
const PORT = 3000;

// 使用定义的路由
app.use('/', router);

// 启动服务器
app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});

6. 运行服务器

在项目根目录下运行以下命令启动服务器:

npx ts-node app.ts

7. 测试端点

使用 curl 测试端点:

curl http://localhost:3000/user/your-username

在这个示例中,确保路径 /user/:username 和你的测试路径 http://localhost:3000/user/your-username 一致,这样路由才能正确匹配并调用对应的处理函数。!

以上没有运行测试


http://www.kler.cn/a/472731.html

相关文章:

  • 【马来西亚理工大学主办,ACM出版】2025年大数据、通信技术与计算机应用国际学术会议(BDCTA 2025)
  • 使用 uniapp 开发微信小程序遇到的坑
  • LAMP搭建
  • 【搜索】【推荐】大 PK
  • 从零开始开发纯血鸿蒙应用之实现起始页
  • 嵌入式ARM平台 openwrt系统下 基于FFmpeg 的视频采集及推流 实践
  • 深度学习第三弹:python入门与线性表示代码
  • find 查找文件grep匹配数据
  • 【Altium】AD使用智能粘贴功能把多个网络标签改成端口
  • Erlang语言的字符串处理
  • Visual CoT:解锁视觉链式思维推理的潜能
  • nginx 日志规范化意义及实现!
  • 【江协STM32】10-2/3 MPU6050简介、软件I2C读写MPU6050
  • PHP MySQL 读取数据
  • canal同步es,sql注意事项
  • WJsoft-D-Security数据仿泄露系统(DLP)存在任意文件读取漏洞
  • Linux存储管理之核心秘密(The Core Secret of Linux Storage Management)
  • ios越狱脚本巨魔商店安装教程
  • 【Java 学习】对象赋值的艺术:Java中clone方法的浅拷贝与深拷贝解析,教你如何在Java中实现完美复制
  • 【超详细】MIT 液态神经网络(LNNs)——深度学习新动向
  • ubuntu18升级至ubuntu20
  • wps宏js接入AI功能和接入翻译功能
  • Aviatrix Controller 未授权命令注入漏洞复现(CVE-2024-50603)
  • JAVA XXE 学习总结
  • C 语言奇幻之旅 - 第16篇:C 语言项目实战
  • 安装 华三云实验室 H3C Cloud Lab