我正在node.js和Typescript中构建REST API。我正在使用tsoa和swagger进行文档编制。构建成功,并且成功生成了swagger.json
,但未找到端点。
来源/应用程序.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 }
源代码/路由/用户.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
时,它返回了带有预期端点的swagger UI,但当我尝试使用/users/{id}
等API时,它返回了404,我无法理解为什么,请提供帮助。
4条答案
按热度按时间sshcrbum1#
另一个答案是正确的,但是在verson 2.4.5中有一个更新和更简单的选项(所以你可能需要升级tsoa来利用它)。如果你把
controllerPathGlobs
添加到tsoa.json
中,它会找到任何有@Route
装饰器的类。所以对你来说,你会需要下面的glob:(note您仍然希望包括其他配置选项--为了简洁起见,我删除了它们)
点击此处阅读更多信息:https://github.com/lukeautry/tsoa#consuming-generated-routes
liwlm1x92#
我在使用TSOA时遇到了同样的问题,当从ts-node运行时,它工作得很好,但是在tsc构建swagger docs后,抛出了一个无法获取的错误。
问题是swagger.json是如何导入的,从require切换到import后,它工作了!
pqwbnv8z3#
您应该在app中导入所有路由器的启动文件参见:https://github.com/lukeautry/tsoa/#consuming-generated-routes
uhry853o4#
在我个人的情况下,它是一个丢失的导入文件。大写字母。