请选择 进入手机版 | 继续访问电脑版

如何组织Node.js REST API?

前端开发  / Node.js  / 倒序浏览   © 著作权归作者本人所有

#楼主# 2020-3-20

跳转到指定楼层

当我开始使用Node.js在服务器端构建REST API时,我一次又一次地为同一个问题苦苦挣扎:

文件夹结构应该如何?

显然,这个问题没有一个完美或100%正确的答案,但是在阅读了有关该主题的一些文章之后,我发现了一个非常适合我需要的文件夹结构。因此,今天我想向您展示如何构建我的REST API。

API主要是基于组件的,这使得仅请求我们真正需要的数据变得更加容易。例如,我们有一个User组件,其中包含有关用户的所有信息。

要提到的一件事是,我将express.js用作网络框架,将TypeORM用作ORM。让我们看一下结构。

目录:

nodejs-api-structure
└───dist
│
└───logs
│
└───node_modules
│
└───src
│
│   README.md
│   ...

这种结构没什么特别的,对您来说不应该是新的。它实际上是一个基本的Node.js设置。有趣的是

src

我们关注的文件夹。

那我们这里有什么?

nodejs-api-structure
└───src
   │
   └───config
   │
   └───api
   │   │
   │   └───components
   │   │
   │   └───middleware
   │   │
   │   │   routes.ts
   │   │   server.ts
   │
   └───services
   │   index.ts

从这里开始,我们将始终从目录的顶部开始工作,我将逐一解释。让我们从

config

目录。

目录:src / config

nodejs-api-structure
└───src
    │
    └───config
       │   globals.ts
       │   logger.ts
       │   permissions.ts

该目录包括配置文件。例如:

  • 全局变量
  • 记录器配置
  • ACL权限
  • SMTP配置

目录:src / api / components

nodejs-api-structure
└───src
    │
    └───api
        │
        └───components
            │
            └───article
            │
            └───auth
            │
            └───country
            │
            └───user
            │   index.ts

在这里,我们有了基于组件的API的核心。每个组件都包含自己的路由控制器模型服务

让我们深入研究用户组件并以它为例。

目录:src / api / components / user

nodejs-api-structure
└───src
    │
    └───api
        │
        └───components
            │
            └───user
                │   controller.ts
                │   model.ts
                │   routes.ts
                │   service.ts

如您所见,组件由我之前提到的文件组成。每个文件代表一个导出的类。当然,您可以在此处添加更多组件特定的内容,例如配置或测试文件。

由于我有多个组件,并且大多数时候它们的类具有相同的结构,因此我也创建了在类中实现的接口。这有助于我保持组件的结构平直。

控制器

控制器类处理传入的请求,对其进行验证,然后将响应数据发送回客户端。它使用服务类与数据库进行交互。

模型

该模型代表其组件的数据库模型。就我而言,它是TypeORM类。通常,它由服务类使用。

route.ts

在这里,我们为相应的组件定义API端点,并为其分配控制器方法。此外,我们可以执行授权(例如JWT),权限验证(例如ACL)或添加特定于组件的中间件之类的事情。

服务

服务类充当数据库的包装器。在这里,我们将数据读取和写入数据库。此外,我们可以实现例如缓存。

目录:src / api / middleware /

nodejs-api-structure
└───src
    │
    └───api
        │
        └───middleware
            │   auth.ts
            │   compression.ts

此文件夹包含所有API的全局中间件,例如身份验证,压缩,请求日志记录等。

文件:src / api / routes.ts

nodejs-api-structure
└───src
    │
    └───api
        │   routes.ts

在这里,我们注册了所有组件和中间件路由。

文件:src / api / server.ts

nodejs-api-structure
└───src
    │
    └───api
       │   server.ts

在这里,我们声明快递服务器所需的一切:

  • 导入中间件/组件路由
  • 错误处理

稍后,我们也可以导入服务器类以进行单元测试。

目录:src / services /

此目录包含我们用于发送邮件,授权或帮助程序方法的全局服务。

nodejs-api-structure
└───src
    │
    └───services
        │   auth.ts
        │   helper.ts
        │   mail.ts

授权

在这里,我们设置诸如护照策略之类的东西并定义授权方法。

助手

helper类包含用于哈希,UUID等的helper方法。

mail.ts

此服务用于发送邮件和呈现其模板。

文件:src / index.ts

这是我们应用程序的启动文件。它将初始化数据库连接并启动快递服务器。

nodejs-api-structure
└───src
    │   index.ts

全部一起

最后但并非最不重要的是,该项目结构的完整概述:

nodejs-api-structure
└───src
    │
    └───config
    │   │   globals.ts
    │   │   logger.ts
    │   │   permissions.ts
    │
    └───api 
    │   │
    │   └───components
    │   │   │
    │   │   └───article
    │   │   │
    │   │   └───user
    │   │       │   controller.ts
    │   │       │   model.ts
    │   │       │   routes.ts
    │   │       │   service.ts
    │   │
    │   └───middleware
    │   │   │   auth.ts
    │   │   │   compression.ts
    │   │
    │   │   routes.ts
    │   │   server.ts
    │
    └───services
    │   index.ts

而已!我希望这对那些遇到相同问题但又不知道从哪里开始或如何开始的人们有所帮助。我认为您还有很多事情可以做得更好或更有效。

转播转播
回复

使用道具

267

主题

269

帖子

917

积分

网站编辑

Rank: 8Rank: 8

积分
917
damonare 发表于 2020-3-22 08:54:23

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|ObjectX 超对象 |粤ICP备20005929号
Powered by  © 2019-2020版权归ObjectX 超对象