Я пытаюсь разработать REST API с помощью Node.js. Я хочу разделить маршруты и конкретные ресурсные модули, стандартизировать организацию ресурсов, иметь разные версии API. Я также хочу избегать определения новых маршрутов каждый раз, когда я разрабатывал соответствующий ресурсный модуль. Поэтому я хочу, чтобы моя маршрутизация автоматически обнаруживала все мои скрипты в каталоге, где расположены все модули ресурсов. Я делаю это, используя модуль fs
. Мой вопрос, однако, касается эффективности такого подхода. Каждый запрос к моему серверу будет включать в себя эти поиски файловой системы, и я не уверен, насколько плохо это повлияет на производительность. Есть ли лучший способ достичь того, чего я пытаюсь достичь?
Промежуточное программное обеспечение, которое обрабатывает различные подкаталоги версий API
const versionRouter = (req, res, next) => {
fs.readdir(__dirname, function(err, items) {
console.log(items);
for (var i = 0; i < items.length; i++) {
if (items[i] != "index.js") {
console.log(items[i]);
let version = items[i];
const express = require("express");
let expressRouter = express.Router();
expressRouter = controllerRouterMiddleware(expressRouter, version);
app.use(uriPrefix + "/" + version, expressRouter);
}
}
next();
});
};
Промежуточное программное обеспечение, которое сканирует контроллеры ресурсов в подкаталоге определенной версии и создает следующие маршруты:
- GET / resource разрешается в методе controller.list
- POST / ресурс разрешается в методе controller.create
- GET / resource /: id преобразуется в метод controller.item
- PUT / resource /: id преобразуется в метод controller.save
- DELETE / resource /: id разрешается в метод controller.delete
const controllerRouterMiddleware = (expressRouter, version) => {
let items = fs.readdirSync(__dirname + "/" + version);
console.log(__dirname + "/" + version);
for (var i = 0; i < items.length; i++) {
console.log(items[i]);
const apiController = require("./" + version + "/" + items[i]);
expressRouter
.route("/" + items[i].slice(0, -3))
.get(apiController.list)
.post(apiController.create);
expressRouter
.route("/" + items[i].slice(0, -3) + "/:id")
.get(apiController.item)
.put(apiController.save)
.delete(apiController.delete);
}
return expressRouter;
};