Node Web后端框架 Express 的学习 --- ②

目录

引言

在前一篇教程中,我们学会了如何搭建基于Express框架的Web平台,为初学者打下了坚实的基础。随着技术的发展和项目需求的日益复杂,我们迫切需要一种更加高效、模块化的解决方案来优化开发流程。本篇教程旨在进一步引导初学者,通过借鉴SpringBoot框架的设计理念,实现一个轻量级的Express应用结构。我们将重点介绍如何进行项目目录文件的功能划分和路由分离,以构建一个逻辑清晰、层次分明的应用程序。通过本教程的学习,你将掌握如何合理组织代码,提高开发效率,同时确保项目的可维护性和可扩展性,为未来可能的功能迭代和团队协作打下坚实的基础。

一、项目划分

  1. Controller层:负责路由接收
  2. Service层:负责业务逻辑
  3. Dao层:负责数据库的操作等
  4. Common目录:负责管理工具、配置文件信息等

创建文件夹以及文件如图所示

image.png

二、分离文件需求分析

  1. 模块化:按功能划分模块,如路由、数据库等。
  2. 文档化:确保有清晰的文档说明目录结构。
  3. 服务化:对于复杂的业务逻辑,可以将其设计为独立的服务,与其他部分解耦。
  4. 复用率:提高代码可复用率,减少代码冗余

三、实现

1. app.js文件分离

1.1 启动文件分离

// app.js
// 以下两行注释仅用于记录系统启动速度,读者可自行斟酌。
const port = 3000;
// console.time(`Service http://localhost:${port} Start Time`);

const app = require("./src");

app.listen(port, () => {
    // console.timeEnd(`Service http://localhost:${port} Start Time`);
    console.log(`Service http://localhost:${port}`);
});

1.2 app操作分离

//src/index.js
const app = require("express")();

app.use("/", require("./controller"));

module.exports = app;

2. 路由分离、三层架构各司其职

2.1 路由汇总

// 负责所有路由的导入
const router = require("express").Router();
router.use("/user", require("./UserController"));
module.exports = router;

2.2 封装返回信息类

// common/models/Result.js
class Result {
    // 定义一个构造函数
    constructor(code, message, data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }
    // 成功
    static success(data) {
        return new Result(200, "success", data);
    }
    // 异常
    static error(message) {
        return new Result(500, message, null);
    }
    
    // 相关服务
    static Redis(){
        return new Result(500, "Redis错误", null);
    }
    static Db(){
        return new Result(500, "数据库错误", null);
    }
}
module.exports = Result;

2.3 三层架构

// UserController.js
const UserControler = require("express").Router();
const UserService = require("../service/UserService");
const Result = require("../common/models/Result");

UserControler.get("/", async (req, res) => {
    res.send(Result.success(await UserService.getUserList()));
});

module.exports = UserControler;
// UserService.js
const UserDao = require("../dao/UserDao");

class UserService {
    async getUserList(){
        return await UserDao.getUserList();
    }
}
module.exports = new UserService();
//UserDao.js
class UserDao {
    async getUserList() {
        return "Dao UserList";
    }
}
module.exports = new UserDao();

结尾

随着本教程的深入,我们已成功搭建了最基础的Express框架,并实现了项目文件的功能划分与文件分离,这不仅让层级关系变得清晰,更为后续开发奠定了坚实的基础。需求背景在于应对日益复杂的Web开发任务,以及提高开发效率和项目的可维护性。我们通过模块化的设计思路,将不同的功能划分到不同的文件中,使得每个部分都简洁且易于管理。接下来,我们将进入Express中间件的学习,这将进一步增强我们的应用功能,为构建更加强大的Web应用打下基础。


下一篇 Node Web后端框架 Express 的学习 — 终

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值