nodejs web服务器 之初始化路由

news2025/1/15 13:11:50

每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数。在匹配时,会按照顺序进行匹配,请求类型和请求的URL同时匹配成功,返回对应的数据。

我们可以创建一个js文件,专门处理路由的逻辑。
我创建了一个routes的文件夹,其里面创建了route.js文件。

const handleRoute = (req, res) => {
    // 定义处理路由的逻辑
    const method = req.method;
    // 判断方法和路径,给出回调结果
    if (method === "GET" && req.path === "/api/user/info") { //获取个人信息
        return {
            user: 'zhangsan',
            id: 666,
            icon: 'https://www.icon.com',
            age: 20,
            nationality:'Chinese'
        }
    }
    if (method === "POST" && req.path === "/api/user/login") {//登录 - post
        return {
            message: 'login success',
            code: 200,
            data: {
                user: 'zhangsan',
                id: 666,
                icon: 'https://www.icon.com',
                age: 20,
                nationality:'Chinese'
            }
        }
    }
}
module.exports = handleRoute;

在这个文件里我写了一个GET和一个POST,对应的路径分别是/api/user/info 和 /api/user/login

并返回的对应的数据对象。

在app.js中引入了route

const routeHandler = require('./routes/route.js');
const serverHandler = (req, res) => { //处理逻辑 业务代码
    res.setHeader('Content-Type', 'application/json');
    req.path = req.url.split('?')[0];
    const routeData = routeHandler(req, res);
    if (routeData) {
        res.end(
            JSON.stringify(routeData)
        );
        return;
    }
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.write('404 not found');
    res.end();
}
module.exports = serverHandler; //导出 serverHandler

在base.js中

const http = require('http');
const serverHandler = require('../app.js');
const PORT = 5005; //端口
const server = http.createServer(serverHandler);
server.listen(PORT, () => {
    console.log('server is running at port ',PORT);
})

这样就简单的做好了路由的demo,当然在实际的项目中不会这么简单,这里只是做一下模拟,后面会涉及到数据库的增删改查等。

下面进行测试

1、测试GET,用户信息的接口,浏览器上输入:  http://localhost:5005/api/user/info

得到了用户信息接口的数据

2、测试POST,用户登录的接口,在apifox上测试

3、测试一个不存在的路径

浏览器输入http://localhost:5005/api/user/info1

显然会返回 “404 not found”

apifox上模拟不存在的路径的POST请求

demo地址 ​​​​​​​

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

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

相关文章

零售EDI:劳氏 Lowe‘s EDI项目案例

通过 EDI,企业与Lowes之间可以直接交换各种商业文档,如订单、发票、收据等,从而实现信息的实时交换,提高了供应链的效率和准确性。在现代供应链管理中,EDI 已经成为了不可或缺的重要工具。 作为一家拥有多条业务线的企…

【数据结构】矩阵的压缩存储

矩阵的压缩存储 5.1 普通矩阵的存储 用二维数组存储 分为行优先和列优先: 行优先:优先存放一行的数据。 列优先:优先存放一列的数据。 注意下标是从0还是1开始的! 5.2 对称矩阵的存储 对称矩阵定义 若n阶方阵中任意一个元素 a i …

【Python】新手入门(8):什么是迭代?迭代的作用是什么?

【Python】新手入门(8):什么是迭代?迭代有什么应用? 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】…

C++读取NC数据的结果与真实数值不一致的解决方法

本文介绍基于C 语言的netCDF库读取.nc格式的栅格文件时,代码读取到的数据与栅格文件的实际数据不一致的解决方法。 最近,由于需要读取ERA5气象数据,因此使用C 语言中的netCDF库读取.nc格式文件。其中,偶然发现在Visual Studio的代…

卷积神经网络(CNN)算法详解

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 引言 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(…

Android Termux系统安装openssh实现公网使用SFTP远程访问

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

外包干了5天,技术退步明显。。。。。

在湖南的一个安静角落,我,一个普通的大专生,开始了我的软件测试之旅。四年的外包生涯,让我在舒适区里逐渐失去了锐气,技术停滞不前,仿佛被时间遗忘。然而,生活的转机总是在不经意间降临。 与女…

【系统学习】2-Java进阶知识总结-3-集合-1-补充【泛型、树、数据结构】

文章目录 泛型什么是泛型?常见的泛型标识符泛型类泛型方法泛型接口通配符 树树的基本概念什么是二叉树?二叉树--普通二叉树二叉树--二叉查找树定义规则优缺点 二叉树--平衡二叉树定义规则旋转机制 二叉树--红黑树定义规则红黑规则 常见数据结构总体特点结…

node的安装与介绍

安装 下载地址 node官网首页就会有两个安装选择,会根据当前电脑的系统自动显示对应的安装包,一个长期维护版(LTS),一个是尝鲜版,记住选择LTS版本 安装指定版本下载截图 安装过程截图(非常简单&#xff…

STM32CubeMX学习笔记14 ---SPI总线

1. 简介 1.1 SPI总线介绍 SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 SPI,是一种高速的,全双工,同步的通信总线,并且在…

掌握Linux之巅:RHCE认证快速攻略

在数字化时代,Linux系统已经成为企业级应用的重要支柱。RHCE(Red Hat Certified Engineer)认证,作为Linux领域的权威认证,不仅代表了专业技术的认可,更是职业发展的有力武器。本文将为你揭秘如何快速掌握Li…

@Autoweird和@Resourse的区别 java定义Bean的方式

Autoweird private Apple apple; Autoweird首先是根据类型来找 就是这个Apple 如果找到多个 会在根据名称就是这个apple来找,如果再找不到,就报错 Resourse相反 举例说明: 我们使用Autoweird ZhouyuService zhouyuService Resourse特别之…

C语言题目练习

目录 前言 1、转置矩阵 1.1 题目 描述 输入描述: 输出描述: 1.2解题 分析: 程序: 2、KiKi判断上三角矩阵 2.1 题目 描述 输入描述: 输出描述: 2.2 解题 分析: 程序: 3、…

什么是工业交换机?

如今,工业交换机在能源、环保、交通、智慧城市监控等各个行业都发挥着至关重要的作用,其需求也日益增长。本文将全面介绍工业交换机,帮助你进一步加深了解。 什么是工业交换机? 工业交换机,又称工业以太网交换机&…

基于微信小程序的电影院订票选座系统的设计与实现(程序+数据库+)

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一、研究背景…

轻薄蓝牙工牌室内人员定位应用

在现代化企业管理的背景下,轻薄蓝牙工牌人员定位应用逐渐崭露头角,成为提升企业效率和安全性的重要工具。本文将从轻薄蓝牙工牌的定义、特点、应用场景以及未来发展趋势等方面,对其进行全面深入的探讨。 一、轻薄蓝牙工牌的定义与特点 轻薄…

Vue:纯前端实现文件拖拽上传

先看一下拖拽相关的事件:dragover、dragenter drop和dragleave 。 dragover事件:当被拖动的元素在一个可放置目标上方时,该事件会被触发。 通常,我们会使用event.preventDefault()方法来取消浏览器默认的拖放行为,以便…

赛事通知丨2024年(第12届)“泰迪杯”挑战赛即将开始

2024年(第12届)“泰迪杯”数据挖掘挑战赛将于3月8日开放报名。“泰迪杯”数据挖掘挑战赛始创于2013年,迄今已经连续举办了12年。累计参赛高校千余所,累计参赛人数逾10万人,全国各省份均有参加。大赛的开展始终秉持推动…

局域网管理工具

每个组织的业务运营方法都是独一无二的,其网络基础设施也是如此,由于随着超融合基础设施等新计算技术的发展,局域网变得越来越复杂,因此局域网管理也应该如此,组织需要量身定制的局域网管理解决方案,这些解…

QT6.6 android开发环境搭建

一.目标 本文目的为实现在QT6.6下搭建android开发环境,可以实现QT6.6开发的QT程序(widget及qml工程)部署到android设备中。 二.环境安装 1.QT6.6环境安装 (1)在线安装器下载: https://download.qt.io/a…