0

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

以我目前的配置,helloController似乎只是在注册。请求GET .../api/v1/hello按预期响应 200 OK。但是,请求以GET .../api/health404 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!")
    }
}
4

2 回答 2

0

它工作得很好,但你不应该使用斜杠作为根路径:

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()})
    }
}
于 2019-12-27T14:09:51.657 回答
0

弄清楚了。

@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()})
    }
}
于 2018-11-14T15:53:03.300 回答