Вопрос:

Возврат приложения TSOA Express не позволяет получить конечные точки

node.js typescript swagger decorator

25 просмотра

2 ответа

1160 Репутация автора

Я строю REST API в node.js и Typescript. Я использую tsoa и swagger для документации. Сборка прошла успешно и swagger.jsonсгенерирована успешно, но конечная точка не найдена.

SRC / app.ts

import * as express from "express"
import * as bodyparser from "body-parser"
import { RegisterRoutes } from "./routes/routes"
import * as swaggerUi from "swagger-ui-express"
import * as methodOverride from "method-override"

/** import all your routes here */
import "./routes/user"

/** End of Routes */
const app = express()

try {
  const swaggerDocument = require("../swagger.json")
  app.use("/docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument))
} catch (err) {
  console.error("Unable to read swagger.json", err)
}
app.use(bodyparser.json())
app.use(methodOverride())
RegisterRoutes(app)

export { app }

SRC / маршруты / user.ts

import {Get,Post,Route,Body,Query,Header,Path,SuccessResponse,Controller as Router } from "tsoa"
import { User, UserCreationRequest } from "../components/user"
import { UserController } from "../controllers/user"
@Route("users")
export class UsersRouter extends Router {
  @Get("/{id}")
  public async getUser(@Path("id") id: number): Promise<User> {
    return new UserController().getUser(id)
  }

  @SuccessResponse("201", "Created") // Custom success response
  @Post()
  public async createUser(
    @Body() requestBody: UserCreationRequest
  ): Promise<void> {
    this.setStatus(201) // set return status 201
    return Promise.resolve()
  }
}

Когда я открываю, /docsон возвращает пользовательский интерфейс с ожидаемыми конечными точками, но когда я пытаюсь использовать API, как /users/{id}он возвращает 404, я не могу понять, почему, помощь будет оценена.

заранее спасибо

Автор: M A SIDDIQUI Источник Размещён: 09.08.2019 09:30

Ответы (2)


0 плюса

6 Репутация автора

Вы должны импортировать весь свой роутер в стартовый файл приложения, см .: https://github.com/lukeautry/tsoa/#consuming-generated-routes

// controllers need to be referenced in order to get crawled by the generator
import './controllers/usersController';
Автор: joni7777 Размещён: 11.08.2019 08:04

0 плюса

104 Репутация автора

Другой ответ правильный, но есть более новый и более простой вариант. Если вы добавите controllerPathGlobsк tsoa.jsonнему найдет любые классы, которые имеют @Routeдекоратор. Так что для вас вам понадобится следующий шар:

{
    "routes": {
        "controllerPathGlobs": [
            "./src/routes/**/*.ts"
        ]
    }
}

(обратите внимание, что вы все равно захотите включить другие параметры конфигурации - я просто удалил их для краткости)

Подробнее читайте здесь: https://github.com/lukeautry/tsoa#consuming-generated-routes

Автор: GreeneCreations Размещён: 13.08.2019 02:54
Вопросы из категории :
32x32