Node.js中开发树形结构接口的实现

 更新时间:2024年12月05日 10:14:47   作者:三线码工  
本文介绍了Node.js中开发树形结构接口的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在现代 Web 开发中,树形结构的数据展示非常常见,例如文件系统、组织架构、分类目录等。本文将介绍如何在 Node.js 中开发一个返回树形结构数据的接口。我们将使用 Express 框架来处理 HTTP 请求,并使用 MySQL 数据库来存储分类数据。

项目初始化

首先,确保你已经安装了 Node.js 和 npm。然后,创建一个新的项目目录并初始化 npm:

mkdir node-tree-api
cd node-tree-api
npm init -y

接下来,安装所需的依赖包:

npm install express mysql2

设置数据库

为了简化示例,我们将使用 MySQL 数据库。如果你还没有安装 MySQL,可以从  MySQL 官方网站 下载并安装。

创建一个新的数据库,例如 tree_api_db:

CREATE DATABASE tree_api_db;
USE tree_api_db;

创建分类表

创建一个名为 categories 的表,包含以下字段:

id: 分类的唯一标识
name: 分类的名称
description: 分类的描述
parent_id: 父分类的 ID,顶级分类的 parent_id 为 NULL 或 0

CREATE TABLE categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    parent_id INT DEFAULT NULL
);

插入示例数据

插入一些示例数据以便测试:

INSERT INTO categories (name, description, parent_id) VALUES
('Electronics', 'Electronic products', NULL),
('Computers', 'Computer products', 1),
('Laptops', 'Laptop computers', 2),
('Desktops', 'Desktop computers', 2),
('Mobile Phones', 'Mobile phones', 1),
('Smartphones', 'Smart mobile phones', 5),
('Feature Phones', 'Feature mobile phones', 5),
('Tablets', 'Tablet devices', 1);

编写树形结构查询逻辑

在项目目录中创建一个 db.js 文件来管理数据库连接:

// db.js
const mysql = require('mysql2');

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'your_mysql_user',
    password: 'your_mysql_password',
    database: 'tree_api_db'
});

connection.connect((err) => {
    if (err) {
        console.error('Error connecting to the database:', err.stack);
        return;
    }
    console.log('Connected to the database.');
});

module.exports = connection;

创建一个 utils.js 文件来处理树形结构的构建:

// utils.js
function buildTree(categories) {
    const map = {};
    const roots = [];

    // 将每个分类放入 map 中
    categories.forEach(category => {
        map[category.id] = { ...category, children: [] };
    });

    // 构建树形结构
    categories.forEach(category => {
        if (category.parent_id === null || category.parent_id === 0) {
            roots.push(map[category.id]);
        } else {
            if (map[category.parent_id]) {
                map[category.parent_id].children.push(map[category.id]);
            }
        }
    });

    return roots;
}

module.exports = { buildTree };

创建 Express 路由

创建一个 app.js 文件来设置 Express 应用并定义路由:

// app.js
const express = require('express');
const db = require('./db');
const { buildTree } = require('./utils');

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

// 中间件,解析 JSON 请求体
app.use(express.json());

// 查询分类表并以树形结构返回
app.get('/api/categories', (req, res) => {
    const sql = "SELECT id, name, description, parent_id FROM categories";

    db.query(sql, (err, results) => {
        if (err) {
            return res.status(500).send({ code: 0, msg: 'Database error', data: null });
        }

        // 构建树形结构
        const tree = buildTree(results);

        // 返回树形结构的数据
        res.send({ code: 1, msg: '获取分类成功', data: tree });
    });
});

app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
});

测试接口

启动你的 Node.js 应用:

node app.js

然后,你可以使用工具如 Postman 或浏览器访问 http://localhost:3000/api/categories 来测试新创建的接口。你应该会看到类似以下的 JSON 响应:

{
    "code": 1,
    "msg": "获取分类成功",
    "data": [
        {
            "id": 1,
            "name": "Electronics",
            "description": "Electronic products",
            "parent_id": null,
            "children": [
                {
                    "id": 2,
                    "name": "Computers",
                    "description": "Computer products",
                    "parent_id": 1,
                    "children": [
                        {
                            "id": 3,
                            "name": "Laptops",
                            "description": "Laptop computers",
                            "parent_id": 2,
                            "children": []
                        },
                        {
                            "id": 4,
                            "name": "Desktops",
                            "description": "Desktop computers",
                            "parent_id": 2,
                            "children": []
                        }
                    ]
                },
                {
                    "id": 5,
                    "name": "Mobile Phones",
                    "description": "Mobile phones",
                    "parent_id": 1,
                    "children": [
                        {
                            "id": 6,
                            "name": "Smartphones",
                            "description": "Smart mobile phones",
                            "parent_id": 5,
                            "children": []
                        },
                        {
                            "id": 7,
                            "name": "Feature Phones",
                            "description": "Feature mobile phones",
                            "parent_id": 5,
                            "children": []
                        }
                    ]
                },
                {
                    "id": 8,
                    "name": "Tablets",
                    "description": "Tablet devices",
                    "parent_id": 1,
                    "children": []
                }
            ]
        }
    ]
}

总结

到此这篇关于Node.js中开发树形结构接口的文章就介绍到这了,更多相关Node.js 树形结构接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)

    node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)

    这篇文章主要介绍了node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具) ,需要的朋友可以参考下
    2019-04-04
  • NodeJS实现同步的方法

    NodeJS实现同步的方法

    今天小编就为大家分享一篇关于NodeJS实现同步的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 详解Node.js中的Async和Await函数

    详解Node.js中的Async和Await函数

    这篇文章主要介绍了Node.js中的Async和Await函数的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • npm镜像源证书过期的问题解决

    npm镜像源证书过期的问题解决

    因为npm官方镜像在国内访问很慢,我们基本上都会选择切换到国内的一些npm镜像,本文主要介绍了npm镜像源证书过期的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • 如何使用axios库在Node.js中进行代理请求(实践案例)

    如何使用axios库在Node.js中进行代理请求(实践案例)

    axios是一个强大的基于Promise的HTTP客户端,它在浏览器和Node.js环境中均可使用,本文将介绍如何充分利用axios库,在Node.js中进行代理请求的最佳实践,并通过一个实际案例来展示其应用,感兴趣的朋友一起看看吧
    2024-03-03
  • 充分发挥Node.js程序性能的一些方法介绍

    充分发挥Node.js程序性能的一些方法介绍

    这篇文章主要介绍了充分发挥Node.js程序性能的一些方法介绍,Node.js是把JavaScript用于服务器端的框架,需要的朋友可以参考下
    2015-06-06
  • Node.js查询MySQL并返回结果集给客户端的全过程

    Node.js查询MySQL并返回结果集给客户端的全过程

    nodejs最大的优势也是大家用着最为难以理解的一点,就是它的异步功能,它几乎所有的io操作都是异步的,这也就导致很多人不理解也用不习惯,下面这篇文章主要给大家介绍了关于Node.js查询MySQL并返回结果集给客户端的相关资料,需要的朋友可以参考下
    2022-12-12
  • 使用pify实现Node.js回调函数的Promise化

    使用pify实现Node.js回调函数的Promise化

    使用pify库,你可以非常便利地将任何遵循Node.js回调风格的函数转换为返回Promise对象的函数,从而使得你的异步代码更加清晰和易于维护,本文通过丰富的代码示例引导你如何有效地利用pify,需要的朋友可以参考下
    2024-06-06
  • Node如何后台数据库使用增删改查功能

    Node如何后台数据库使用增删改查功能

    这篇文章主要介绍了Node如何后台数据库使用增删改查功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 详解Nodejs基于mongoose模块的增删改查的操作

    详解Nodejs基于mongoose模块的增删改查的操作

    本篇文章主要介绍了Nodejs基于mongoose模块的增删改查的操作,Mongoose是MongoDB的一个对象模型工具,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单。
    2016-12-12

最新评论