用班级组织express.Router吗?

时间:2019-07-14 01:39:17

标签: node.js typescript express

我正在尝试使用Express路由器和Typescript中的类来组织路由。到目前为止,这是我尝试过的。 index.ts文件应该引用notes.ts文件中的Notes类,该类通过私有方法公开端点。

例如,我有一个文件index.ts

import * as express from "express";
import rootRoutes from "./root";
import { Notes } from "./notes";
import accountRoutes from "./account";

const router: express.Router = express.Router();
router.use("/", rootRoutes);
router.use("/account", accountRoutes);
router.use("/notes", Notes.routes);

export = router;

和另一个文件notes.ts

import express, { Router, Request, Response, NextFunction } from "express";
const router: express.Router = express.Router();

export class Notes {

    constructor() {
        this.routes();
    }

    private routes(): void {
        //Get notes
        router
            .route("/")
            .get((req: Request, res: Response, next: NextFunction) => {
                res.send("notes");
            });
    }
}

我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

您正在调用私有方法router.use("/notes", Notes.routes);

要像以前一样使用它,首先必须实例化该类或使该方法静态。

将类实例状态与路由器状态混合可能会很棘手,请尝试使其不具有任何实例状态。

我也建议您将实现简化为以下形式:

export class Notes {
    static handler(req: Request, res: Response): void {
       res.send('Hello from A!')
    }
}


app.get('/', Notes.handler);