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

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

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

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

接下來(lái),安裝所需的依賴(lài)包:

npm install express mysql2

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

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

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

CREATE DATABASE tree_api_db;
USE tree_api_db;

創(chuàng)建分類(lèi)表

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

id: 分類(lèi)的唯一標(biāo)識(shí)
name: 分類(lèi)的名稱(chēng)
description: 分類(lèi)的描述
parent_id: 父分類(lèi)的 ID,頂級(jí)分類(lèi)的 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ù)以便測(cè)試:

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

編寫(xiě)樹(shù)形結(jié)構(gòu)查詢(xún)邏輯

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

// 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 文件來(lái)處理樹(shù)形結(jié)構(gòu)的構(gòu)建:

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

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

    // 構(gòu)建樹(shù)形結(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 文件來(lái)設(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 請(qǐng)求體
app.use(express.json());

// 查詢(xún)分類(lèi)表并以樹(shù)形結(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)建樹(shù)形結(jié)構(gòu)
        const tree = buildTree(results);

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

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

測(cè)試接口

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

node app.js

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

{
    "code": 1,
    "msg": "獲取分類(lèi)成功",
    "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中開(kāi)發(fā)樹(shù)形結(jié)構(gòu)接口的文章就介紹到這了,更多相關(guān)Node.js 樹(shù)形結(jié)構(gòu)接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

    由于之前的node為8.0版本,不太滿(mǎn)足需求,所以需要安裝高版本的node,下面這篇文章主要給大家介紹了關(guān)于Node卸載超詳細(xì)步驟的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(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爬蟲(chóng)爬取網(wǎng)站數(shù)據(jù)的方法

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

    這篇文章主要介紹了手把手教你用Node.js爬蟲(chóng)爬取網(wǎng)站數(shù)據(jù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    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ù)器,讓請(qǐng)求處理程序能夠返回一些有意義的信息,需要的朋友可以參考下
    2014-12-12
  • nodejs的10個(gè)性能優(yōu)化技巧

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

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

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

    這篇文章主要介紹了TypeScript開(kāi)發(fā)Node.js程序的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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à)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • NodeJS多種創(chuàng)建WebSocket監(jiān)聽(tīng)的方式(三種)

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

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

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

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

最新評(píng)論

九江市| 雅安市| 沧州市| 渝中区| 巴彦淖尔市| 左云县| 轮台县| 尉氏县| 陇南市| 满洲里市| 新化县| 台北市| 黑龙江省| 民乐县| 山西省| 常山县| 鹿邑县| 炉霍县| 禄丰县| 云林县| 西城区| 广平县| 达拉特旗| 卓尼县| 建瓯市| 广饶县| 宜章县| 武汉市| 万年县| 徐闻县| 英德市| 天气| 嫩江县| 阿拉善盟| 德江县| 天全县| 清苑县| 章丘市| 遵义市| 太仓市| 玛沁县|