api - 如何在快递中手动注册基于分类的路线
问题描述
我正在使用 express 构建一个框架应用程序,并尝试将我的端点编写为类以提高清晰度和可扩展性:
module.exports = class MyRoute {
method = 'get';
url = '/stuff';
constructor(someService) {
this.someService = someService;
}
async handler(req, res, next) {
// handle request and response
}
}
但是,如果我这样做,我怎样才能快速注册这些路线?我以前在以前的工作中看到过它,但我不记得怎么做!
解决方案
目前还不清楚你到底想要什么,我可以想出很多方法来利用这种设计。
但我认为这就是你想要的,因为你有你的班级method
并且url
属性。
routeModule.js
文件:
module.exports = class MyRoute {
method = 'get';
url = '/stuff';
constructor(someService) {
this.someService = someService;
}
async handler(req, res, next) {
// handle request and response
}
}
index.js
文件或您注册路线的任何地方:
const routeModule = new (require("./path/to/routeModule"))();
app[routeModule.method](routeModule.url, routeModule.handler);
method
该代码将通过名称和动态注册您的路线url
,结果将等同于
app.get("/stuff", routeModule.handler);
如果您手动注册大量路由,我想到了一些可能会使您的代码更清晰的方法。我在快速客户端上创建了一个函数来注册一个路由模块:
const app = express();
app.addRouteModule = function(s) {
this[s.method](s.url, s.handler);
}
然后你可以很容易地调用它来注册一个类作为一个新的路由:
const routeModuleA = new (require("./path/to/routeModuleA"))();
const routeModuleB = new (require("./path/to/routeModuleB"))();
const routeModuleC = new (require("./path/to/routeModuleC"))();
app.addRouteModule(routeModuleA);
app.addRouteModule(routeModuleB);
app.addRouteModule(routeModuleC);
// or
app.addRouteModule(new (require("./path/to/routeModuleA"))());
app.addRouteModule(new (require("./path/to/routeModuleB"))());
app.addRouteModule(new (require("./path/to/routeModuleC"))());
推荐阅读
- python - Yocto,元蟒蛇
- c# - 限制机器人框架中的自动滚动聊天窗口
- python - Python - sqlite3 中的多个 LIKE 参数
- android - 我有一个搜索栏,在搜索栏中搜索项目后,如果我单击返回按钮,应用程序将关闭
- excel - Excel-VBA 中的部分字符串匹配和查找
- java - 将数据从 mainActivity.java 传递到 Flutter 项目的特定 dart 文件中
- autodesk-forge - 获取 SVF2 的 PropertyDb
- r - 从 dplyr 或 gt 转置结果表
- python - 使用 reset_index() 为聚合列起别名
- python - 为什么我不能使用两个“if 语句”而不是一个 elif,如果两者中只有一个会执行?