Как использовать маршруты в TypeORM? - PullRequest
0 голосов
/ 09 июля 2020

Я узнаю TypeORM , я создал проект из его Quick Start документации, включая ту же иерархию папок, я выполнил все шаги и был создан проект это сработало правильно. Но у созданного стандартного проекта есть только 1 маршрут, который представляет собой User с его контроллером и его сущностью, имеющую в своем основном файле следующее объявление:

index.ts

import {Routes} from "./routes";

createConnection().then(async connection => {

  // create express app
  const app = express();
  app.use(bodyParser.json());

  // register express routes from defined application routes
  Routes.forEach(route => {
    (app as any)[route.method](route.route, (req: Request, res: Response, next: Function) => {
        const result = (new (route.controller as any))[route.action](req, res, next);
        if (result instanceof Promise) {
            result.then(result => result !== null && result !== undefined ? res.send(result) : undefined);

        } else if (result !== null && result !== undefined) {
            res.json(result);
        }
    });
});
...

user.ts - (Entity)

import {UserController} from "../controller/UserController";

export const Users = [{
  method: "get",
  route: "/users",
  controller: UserController,
  action: "all"
}, {
  method: "get",
  route: "/users/:id",
  controller: UserController,
  action: "one"
}, {    
  method: "post",
  route: "/users",
  controller: UserController,
  action: "save"
}, {
  method: "delete",
  route: "/users/:id",
  controller: UserController,
  action: "remove"
}];

UserController.ts

import {getRepository} from "typeorm";
import {NextFunction, Request, Response} from "express";
import {Users} from "../entity/User";

export class UserController {

  private userRepository = getRepository(Users);

  async all(request: Request, response: Response, next: NextFunction) {
    return this.userRepository.find()
  }

  async one(request: Request, response: Response, next: NextFunction) {
    return this.userRepository.findOne(request.params.id);
  }

  async save(request: Request, response: Response, next: NextFunction) {
    return this.userRepository.save(request.body);
  }

  async remove(request: Request, response: Response, next: NextFunction) {
    let userToRemove = await this.userRepository.findOne(request.params.id);
    await this.userRepository.remove(userToRemove);
  }

}

Мои сомнения будут следующими:

  • Есть ли способ go с этой структурой с более чем одним маршрутом или этот шаблон только для 1 маршрута?

  • Если есть возможность продолжить с этой структурой, как бы вы, например, объявили другой маршрут?

...