我如何在打字稿中合并来自不同文件的不同快递路线

时间:2019-08-12 08:10:09

标签: node.js typescript express

我最近迁移到打字稿,并且在合并来自不同ts文件的不同路由时遇到了问题。

这就是我以前在js中做的方式 app.use("/users/auth", require("./routes/user/auth")); app.use("/users", require("./routes/user/index"));

ts中有类似的解决方案吗?

这是我在ts中的路线课程


export default class Routes {
  public routes(app: Application): void {

    app.route("/").get((req: Request, res: Response) => {
      res.status(200).send({
        message: "GET request successfulll!!!!"
      });
    });

    app
      .route("/contact")
      .get((req: Request, res: Response) => {
        res.status(200).send({
          message: "GET request successfulll!!!!"
        });
      })
      .post((req: Request, res: Response) => {
        res.status(200).send({
          message: "POST request successfulll!!!!"
        });
      });
  }
}

2 个答案:

答案 0 :(得分:0)

我通常不使用打字稿,但是应该和我认为的普通javascript一样。

您可以执行以下操作:

您的结构类似于以下示例:

  • 控制器
  • 助手
  • 公开
  • 路线 --index.js --api --- index.js --- sunbscriber.js
  • 观看次数

在app.js中:

app.use('/', './routes/index');

在index.js文件中的目录路由中

const express = require('express');
const router = express.Router();
router.use(require('./api');
module.exports = router;

在index.js文件中的route / api目录中

const express = require('express')
const router = express.Router();
router.use('/subscriber', require('./subscriber'));
module.exports = router;

在目录routes / api /中,在Subscriber.js文件中

var express = require('express');
var router = express.Router();
router.get('/', function (req, res, next) {
  //Your Route
});

我不知道这是否是最佳实践,但我喜欢这种结构,因为您可以区分不同的路线。轻松为登录之类的路由配置其他中间件。

答案 1 :(得分:0)

执行以下重构:

  • 将导出命令重命名为:

    export class Routes { ... }

  • routes方法设为静态方法:

    public static routes(app: Application): void { ... }

  • 使用Typescript方式导入类:

    import {Routes} from '/[path-to-file]'

  • app.use命令更改为:

    app.use('/...', Router.routes(app)); '

另外,正如另一个用户所提到的,表达最佳做法建议使用路由器,而不是直接向应用实例添加路由:

export default class Routes {
  public routes(): Router {

    const router = express.Router();
    router.route("/").get((req: Request, res: Response) => {
      res.status(200).send({
        message: "GET request successfulll!!!!"
      });
    });

    router
      .route("/contact")
      .get((req: Request, res: Response) => {
        res.status(200).send({
          message: "GET request successfulll!!!!"
        });
      })
      .post((req: Request, res: Response) => {
        res.status(200).send({
          message: "POST request successfulll!!!!"
        });
      });

    return router;

  }
}

如果您选择与此选项一起使用,则无需将应用程序作为参数传递给route()调用: app.use('/...', Router.routes());