node.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > node.js > Node.js 树形结构接口

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

作者:三线码工

本文介绍了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 树形结构接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文