17人参与 • 2025-02-13 • 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 };
创建一个 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 树形结构接口内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论