我最近迁移到打字稿,并且在合并来自不同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!!!!"
});
});
}
}
答案 0 :(得分:0)
我通常不使用打字稿,但是应该和我认为的普通javascript一样。
您可以执行以下操作:
您的结构类似于以下示例:
在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());