Я создаю приложение expressJS и хочу, чтобы было очень легко добавлять конечные точки. Итак, у меня есть класс Endpoint, который обрабатывает множество вещей, в том числе предоставляет базовые функции CRUD для Express Router
Но когда я создаю экземпляры нескольких конечных точек и вызываю функции, связанные с их маршрутизаторами, создается впечатление, что они всегда выполняют функции, определенные в любой конечной точке, которую я сначала создал.
Установка здесь не использует экспресс, но иллюстрирует ту же проблему.
Я не очень много пробовал, прими сведение проблемы до минимально достаточного кода, необходимого для демонстрации проблемы.
Вы можете увидеть код ниже, или проверить https://repl.it/@SethGreen1/WhoppingJuniorTerabyte
Вот файл index.js
, который запускает все:
const Router = require('./router.js');
const Endpoint = require('./endpoint.js');
const AppleEndpoint = new Endpoint("Apple");
const OrangeEndpoint = new Endpoint("Orange");
const AppleRouter = AppleEndpoint.getRouter();
const OrangeRouter = OrangeEndpoint.getRouter();
AppleRouter.executeRoute("get");
OrangeRouter.executeRoute("get");
И, router.js:
class Router {
constructor() {
this.routes = [];
}
addRoute(name, func){
this.routes[name] = func;
}
executeRoute(name){
this.routes[name]();
}
}
module.exports = new Router();
И, наконец, endpoint.js
const Router = require('./router.js');
class Endpoint {
constructor(name) {
this.name = name;
}
getRouter() {
Router.addRoute("get", () => {
console.log(this.name);
});
return Router;
}
getName() {
console.log(this.name);
}
}
module.exports = Endpoint;
Я ожидаю, что этот код напечатает:
Apple
Orange
Вместо этого это печать:
Orange
Orange