最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js中開發(fā)樹形結(jié)構(gòu)接口的實(shí)現(xiàn)

 更新時(shí)間:2024年12月05日 10:14:47   作者:三線碼工  
本文介紹了Node.js中開發(fā)樹形結(jié)構(gòu)接口的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在現(xiàn)代 Web 開發(fā)中,樹形結(jié)構(gòu)的數(shù)據(jù)展示非常常見,例如文件系統(tǒng)、組織架構(gòu)、分類目錄等。本文將介紹如何在 Node.js 中開發(fā)一個(gè)返回樹形結(jié)構(gòu)數(shù)據(jù)的接口。我們將使用 Express 框架來處理 HTTP 請求,并使用 MySQL 數(shù)據(jù)庫來存儲分類數(shù)據(jù)。

項(xiàng)目初始化

首先,確保你已經(jīng)安裝了 Node.js 和 npm。然后,創(chuàng)建一個(gè)新的項(xiàng)目目錄并初始化 npm:

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

接下來,安裝所需的依賴包:

npm install express mysql2

設(shè)置數(shù)據(jù)庫

為了簡化示例,我們將使用 MySQL 數(shù)據(jù)庫。如果你還沒有安裝 MySQL,可以從  MySQL 官方網(wǎng)站 下載并安裝。

創(chuàng)建一個(gè)新的數(shù)據(jù)庫,例如 tree_api_db:

CREATE DATABASE tree_api_db;
USE tree_api_db;

創(chuàng)建分類表

創(chuàng)建一個(gè)名為 categories 的表,包含以下字段:

id: 分類的唯一標(biāo)識
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
);

插入示例數(shù)據(jù)

插入一些示例數(shù)據(jù)以便測試:

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);

編寫樹形結(jié)構(gòu)查詢邏輯

在項(xiàng)目目錄中創(chuàng)建一個(gè) db.js 文件來管理數(shù)據(jù)庫連接:

// 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;

創(chuàng)建一個(gè) utils.js 文件來處理樹形結(jié)構(gòu)的構(gòu)建:

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

    // 將每個(gè)分類放入 map 中
    categories.forEach(category => {
        map[category.id] = { ...category, children: [] };
    });

    // 構(gòu)建樹形結(jié)構(gòu)
    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 };

創(chuàng)建 Express 路由

創(chuàng)建一個(gè) app.js 文件來設(shè)置 Express 應(yīng)用并定義路由:

// 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());

// 查詢分類表并以樹形結(jié)構(gòu)返回
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 });
        }

        // 構(gòu)建樹形結(jié)構(gòu)
        const tree = buildTree(results);

        // 返回樹形結(jié)構(gòu)的數(shù)據(jù)
        res.send({ code: 1, msg: '獲取分類成功', data: tree });
    });
});

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

測試接口

啟動(dòng)你的 Node.js 應(yīng)用:

node app.js

然后,你可以使用工具如 Postman 或?yàn)g覽器訪問 http://localhost:3000/api/categories 來測試新創(chuàng)建的接口。你應(yīng)該會(huì)看到類似以下的 JSON 響應(yīng):

{
    "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": []
                }
            ]
        }
    ]
}

總結(jié)

到此這篇關(guān)于Node.js中開發(fā)樹形結(jié)構(gòu)接口的文章就介紹到這了,更多相關(guān)Node.js 樹形結(jié)構(gòu)接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Ubuntu上安裝最新版本的Node.js

    在Ubuntu上安裝最新版本的Node.js

    Node.js是一個(gè)軟件平臺,通常用于構(gòu)建大規(guī)模的服務(wù)器端應(yīng)用。Node.js使用JavaScript作為其腳本語言,由于其非阻塞I/O設(shè)計(jì)以及單線程事件循環(huán)機(jī)制,使得它可以交付超高的性能。
    2014-07-07
  • Node卸載超詳細(xì)步驟(附圖文講解!)

    Node卸載超詳細(xì)步驟(附圖文講解!)

    由于之前的node為8.0版本,不太滿足需求,所以需要安裝高版本的node,下面這篇文章主要給大家介紹了關(guān)于Node卸載超詳細(xì)步驟的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • nodejs redis 發(fā)布訂閱機(jī)制封裝實(shí)現(xiàn)方法及實(shí)例代碼

    nodejs redis 發(fā)布訂閱機(jī)制封裝實(shí)現(xiàn)方法及實(shí)例代碼

    這篇文章主要介紹了nodejs redis 發(fā)布訂閱機(jī)制封裝的相關(guān)資料,這里提供了實(shí)現(xiàn)方法,及實(shí)例代碼,具有參考價(jià)值,需要的朋友可以參考下
    2016-12-12
  • 手把手教你用Node.js爬蟲爬取網(wǎng)站數(shù)據(jù)的方法

    手把手教你用Node.js爬蟲爬取網(wǎng)站數(shù)據(jù)的方法

    這篇文章主要介紹了手把手教你用Node.js爬蟲爬取網(wǎng)站數(shù)據(jù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • 輕松創(chuàng)建nodejs服務(wù)器(6):作出響應(yīng)

    輕松創(chuàng)建nodejs服務(wù)器(6):作出響應(yīng)

    這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(6):作出響應(yīng),我們接著改造服務(wù)器,讓請求處理程序能夠返回一些有意義的信息,需要的朋友可以參考下
    2014-12-12
  • nodejs的10個(gè)性能優(yōu)化技巧

    nodejs的10個(gè)性能優(yōu)化技巧

    在我接觸JavaScript(無論瀏覽器還是NodeJS)的時(shí)間里,總是遇到有朋友有多線程的需求。而在NodeJS方面,有朋友甚至直接說到,NodeJS是單線程的,無法很好的利用多核CPU。那么我們在使用過程中,就要非常注意性能優(yōu)化了
    2014-07-07
  • TypeScript開發(fā)Node.js程序的方法

    TypeScript開發(fā)Node.js程序的方法

    這篇文章主要介紹了TypeScript開發(fā)Node.js程序的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • nodejs根據(jù)ip數(shù)組在百度地圖中進(jìn)行定位

    nodejs根據(jù)ip數(shù)組在百度地圖中進(jìn)行定位

    本文主要介紹了nodejs根據(jù)ip數(shù)組在百度地圖中進(jìn)行定位的方法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式(三種)

    NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式(三種)

    這篇文章主要介紹了NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Node.js圖片驗(yàn)證碼識別功能

    Node.js圖片驗(yàn)證碼識別功能

    現(xiàn)在越來越多的網(wǎng)站采取圖片驗(yàn)證碼,防止機(jī)器惡意向服務(wù)端發(fā)送請求,但是常規(guī)的圖片驗(yàn)證碼也不是非常安全了,有非常多第三方庫可以對圖片上的數(shù)字文字等進(jìn)行識別,下面小編給大家分享Node.js圖片驗(yàn)證碼識別功能實(shí)現(xiàn),感興趣的朋友一起看看吧
    2024-04-04

最新評論

斗六市| 南丰县| 昌平区| 东明县| 叶城县| 方正县| 分宜县| 马鞍山市| 商水县| 霍林郭勒市| 南岸区| 台中县| 潜山县| 安新县| 南涧| 泰顺县| 连江县| 家居| 玉溪市| 仲巴县| 宜昌市| 舞阳县| 凌海市| 尖扎县| 柘荣县| 台中县| 靖安县| 澎湖县| 长垣县| 临猗县| 津市市| 彰化县| 巨野县| 祁连县| 通化市| 蕉岭县| 绩溪县| 保靖县| 玉门市| 崇义县| 新丰县|