91-Nodejs课程2023:休息路线:静止课程
#typescript #node #mongodb #fastify

我们已经完成了我们的resource方法的实现,但是我们必须为每个Restful路线编写以下代码(我们将在我们的真实项目中使用很多)。


// src/app/users/routes.ts
import router from "core/router";
import login from "./controllers/auth/login";
import listUsers from './controllers/users/list';
import getUser from './controllers/users/get';
import createUser from './controllers/users/create';
import updateUser from './controllers/users/update';
import patchUser from './controllers/users/patch';

const restfulUser = {
    list: listUsers,
    get: getUser,
    create: createUser,
    update: updateUser,
    patch: patchUser,
};

router.resource("/users", restfulUser);

router.post("/login", login);

这是很多编写代码,为什么?因为我们(Developers clan)太懒了,所以让我们做得更好。

ð宁静班

想象我们可以执行相同的事情,但是只要将我们的静修方法包裹在课堂上,然后将课程传递给resource方法,这就是我们要做的。

ð工作流程

所以这是如何工作的:

  • 首先,我们将创建我们的Restful类,其中包含所有静止方法:
  1. list:获取所有资源
  2. get:获取特定资源
  3. create:创建一个新资源
  4. update:更新特定资源
  5. delete:删除特定资源
  6. patch:更新特定资源

现在让我们实施我们刚才说的。

ð实施

转到router目录,然后创建restful.ts文件并添加以下代码:

// src/core/router/restful.ts
import { Request, Response } from "core/http";
import { RouteResource } from "core/router/types";

export default class Restful implements RouteResource {
  /**
   * List records
   */
  public async list() {
    //
  }

  /**
   * Get single record
   */
  public async get(request: Request, response: Response) {
    //
  }

  /**
   * Create record
   */
  public async create(request: Request) {
    //
  }

  /**
   * Update record
   */
  public async update(request: Request, response: Response) {
    //
  }

  /**
   * Delete record
   */
  public async delete(request: Request, response: Response) {
    //
  }

  /**
   * Patch record
   */
  public async patch(request: Request, response: Response) {
    //
  }
}

我们刚刚创建了一个Restful类,其中包含所有恢复方法,所有这些方法当然都没有实现。

问题是,我们将如何使用它?

的用法

在开始实施之前,我们需要首先知道这将如何工作,对我们要做的事情有一个清晰的愿景,让我们创建一个RestfulUser类,其中包含所有修复的方法,我们'在我们的users路线中使用它。

// src/app/users/routes.ts
import router from "core/router";
import login from "./controllers/auth/login";
import restfulUser from './controllers/restful-user';

router.resource("/users", restfulUser);

router.post("/login", login);

现在让我们实现restfulUser类。

// src/app/users/controllers/restful-user.ts
import { Request, Response } from "core/http";
import Restful from "core/router/restful";
import { RouteResource } from "core/router/types";

class RestfulUser extends Restful implements RouteResource {
  /**
   * List records
   */
  public async list() {
    //
  }

  /**
   * Get single record
   */
  public async get(request: Request, response: Response) {
    //
  }

  /**
   * Create record
   */
  public async create(request: Request) {
    //
  }

  /**
   * Update record
   */
  public async update(request: Request, response: Response) {
    //
  }

  /**
   * Delete record
   */
  public async delete(request: Request, response: Response) {
    //
  }

  /**
   * Patch record
   */
  public async patch(request: Request, response: Response) {
    //
  }
}

const restfulUser = new RestfulUser();

export default restfulUser;

这里没有什么是新的,我们刚刚创建了一个RestfulUser类,它扩展了Restful类,我们刚刚创建了一个用户类的实例。

让我们首先实现我们的列表方法。

// src/app/users/controllers/restful-user.ts
import { Request, Response } from "core/http";
import Restful from "core/router/restful";
import { RouteResource } from "core/router/types";
import User from './../models/user';

class RestfulUser extends Restful implements RouteResource {
  /**
   * List records
   */
  public async list(request: Request, response: Response) {
    const users = await User.list();
    return response.success({
      users
    });
  }

  /**
   * Get single record
   */
  public async get(request: Request, response: Response) {
    //
  }

  /**
   * Create record
   */
  public async create(request: Request) {
    //
  }

  /**
   * Update record
   */
  public async update(request: Request, response: Response) {
    //
  }

  /**
   * Delete record
   */
  public async delete(request: Request, response: Response) {
    //
  }

  /**
   * Patch record
   */
  public async patch(request: Request, response: Response) {
    //
  }
}

我们在list方法中列出了用户,并在响应中返回了用户。

我们将为所有宁静的方法做到这一点,这将正常工作。

这是最好的方法吗?

答案绝对是否定的,当我们开始自定义RESTFUL类以执行每种方法所需的内容时,我们将看到如何使其变得更好。

这将使我们的基础代码(Restful class)更加复杂,但是高级代码(RestfulUser class)将更加清洁,更易于阅读。

这就是我们在下一篇文章中要做的。

- 结论

在本文中,我们介绍了Restful资源的概念,并实施了RESTFULES类,并在users路线中使用了它。

â•给我买一杯咖啡。

如果您喜欢我的文章并看到对您有用,则可以buy me a coffee,它将帮助我继续前进并继续创建更多内容。

ð项目存储库

您可以在Github

上找到此项目的最新更新

ð加入我们的社区

加入我们的社区Discord获得帮助和支持(节点JS 2023频道)。

ð视频课程(阿拉伯语)

如果您想以视频格式学习此课程,则可以在Youtube上找到该课程,该课程是阿拉伯语。

ð奖励内容ð

您可能会看这些文章,这肯定会提高您的知识和生产力。

一般主题

软件包和库

React JS软件包

课程(文章)