【问题标题】:Getting 404 from inversify-express-utils controller从 inversify-express-utils 控制器获取 404
【发布时间】:2018-11-13 22:15:24
【问题描述】:

我正在努力正确配置 inversify-express-utils 服务。我正在尝试使用两个控制器,但 inversify 似乎只发现了其中一个。

以我当前的配置,似乎只有helloController 正在注册。对GET .../api/v1/hello 的请求按预期响应 200 OK。但是,对 GET .../api/health 的请求会返回 404 NOT FOUND。

我做错了什么?

这是我目前的配置:

src
│
└──api
   │  index.ts
   │
   └──controller
      │  index.ts
      │  healthController.ts
      │
      └──v1
         │  index.ts
         │  helloController.ts

src/api/index.ts

import "reflect-metadata"
import {Container} from "inversify"
import {InversifyExpressServer} from "inversify-express-utils"
import "./api/controller"

const inversifyContainer = new Container()
const server = new InversifyExpressServer(inversifyContainer)
const serverInstance = server.build()
serverInstance.listen(3000)

src/api/controller/index.ts

export * from "./healthController"
export * from "./v1/"

src/api/controller/healthController.ts

import {Request, Response} from "express"
import {BaseHttpController, controller, httpGet} from "inversify-express-utils"

@controller('/')
export class HealthController extends BaseHttpController {

    constructor(){ super() }

    @httpGet('/health')
    private health(req: Request, resp: Response) {
        resp.json({uptime: process.uptime()})
    }
}

src/api/controller/v1/index.ts

export * from "./helloController"

src/api/controller/v1/helloController.ts

import {Request, Response} from "express"
import {BaseHttpController, controller, httpGet} from "inversify-express-utils"


@controller('/v1/hello')
export class helloController extends BaseHttpController {

    @httpGet('/')
    private hello(req: Request, resp: Response) {
        resp.send("Hello, World!")
    }
}

【问题讨论】:

    标签: typescript express inversifyjs


    【解决方案1】:

    想通了。

    @controller() 注释似乎不适用于根 ('/') 路径。

    healthController.ts 更改为以下内容后工作

    import {Request, Response} from "express"
    import {BaseHttpController, controller, httpGet} from "inversify-express-utils"
    
    @controller('/health')
    export class HealthController extends BaseHttpController {
    
        @httpGet('/')
        private health(req: Request, resp: Response) {
            resp.json({uptime: process.uptime()})
        }
    }
    

    【讨论】:

      【解决方案2】:

      效果很好,但你不应该使用斜杠作为根路径:

      import {Request, Response} from "express"
      import {BaseHttpController, controller, httpGet} from "inversify-express-utils"
      
      @controller('')
      export class HealthController extends BaseHttpController {
      
          @httpGet('/health')
          private health(req: Request, resp: Response) {
              resp.json({uptime: process.uptime()})
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 2019-01-25
        • 2019-12-29
        • 1970-01-01
        • 1970-01-01
        • 2014-07-07
        相关资源
        最近更新 更多