我想在Typescript中使用Express.js来指定更模块化/ OO的代码。
我想通过实现IRoute接口然后将新路由添加到app.use()来实现路由/控制器。
我面临的问题是每个操作(get,post,put,delete)本身都返回IRoute接口,我不知道该返回什么。回来
操作中return <IRoute> this;
无效。
typescript编译器响应,并显示以下错误消息:
Class MessurmentsController错误地实现了接口IRoute。财产类型
all
是不可容忍的。类型(req: Request, res: Response, next: Function) => void
无法分配给type (...handler: RequestHandler[]): IRoute
。参数类型req
和handler
不可用。类型Request
不能分配RequestHandler
类型。
/// <reference path="../../../typings/tsd.d.ts" />
import {IRoute, Request,Response} from 'express';
export class MeasurementsController implements IRoute {
path: string;
stack: any;
constructor(){
this.path = "/api/measurements"
}
all(req: Request, res: Response, next: Function){
res.send('');
//return <IRoute> this;
}
get(req: Request, res: Response, next: Function){
res.send('');
}
post(req: Request, res: Response, next: Function){
res.send('');
}
put(req: Request, res: Response, next: Function){
res.send('');
}
delete(req: Request, res: Response, next: Function){
res.send('');
}
patch(req: Request, res: Response, next: Function){
res.send('');
}
options(req: Request, res: Response, next: Function){
res.send('');
}
head(req: Request, res: Response, next: Function){
res.send('');
}
}
d.ts中的路线定义为
module e {
interface IRoute {
path: string;
stack: any;
all(...handler: RequestHandler[]): IRoute;
get(...handler: RequestHandler[]): IRoute;
post(...handler: RequestHandler[]): IRoute;
put(...handler: RequestHandler[]): IRoute;
delete(...handler: RequestHandler[]): IRoute;
patch(...handler: RequestHandler[]): IRoute;
options(...handler: RequestHandler[]): IRoute;
head(...handler: RequestHandler[]): IRoute;
}
在操作中我需要返回什么才能使其正常工作?
答案 0 :(得分:5)
最后出现了一个解决方案:
路由控制器 允许使用方法创建控制器类作为处理请求的操作。您可以将路由控制器与express.js或koa.js一起使用。 https://github.com/pleerock/routing-controllers
答案 1 :(得分:2)
我希望这会对你有所帮助。
`export class Admin implements IRoute { path: string; stack: any; constructor() { this.path = '/api/Admin'; } all(handerl: RequestHandler): any { return this; } get(handerl: RequestHandler): any { return this; } post(handerl: RequestHandler): any { return this; } put(handerl: RequestHandler): any { return this; } delete(handerl: RequestHandler): any { return this; } patch(handerl: RequestHandler): any { return this; } options(handerl: RequestHandler): any { return this; } head(handerl: RequestHandler): any { return this; } }`