我们已经完成了我们的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
类,其中包含所有静止方法:
-
list
:获取所有资源 -
get
:获取特定资源 -
create
:创建一个新资源 -
update
:更新特定资源 -
delete
:删除特定资源 -
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上找到该课程,该课程是阿拉伯语。
ð奖励内容ð
您可能会看这些文章,这肯定会提高您的知识和生产力。
一般主题
- Event Driven Architecture: A Practical Guide in Javascript
- Best Practices For Case Styles: Camel, Pascal, Snake, and Kebab Case In Node And Javascript
- After 6 years of practicing MongoDB, Here are my thoughts on MongoDB vs MySQL
软件包和库
- Collections: Your ultimate Javascript Arrays Manager
- Supportive Is: an elegant utility to check types of values in JavaScript
- Localization: An agnostic i18n package to manage localization in your project
React JS软件包
课程(文章)