带有Typescript的Express.js路由

时间:2015-09-20 10:50:51

标签: node.js express typescript typescript1.6

我想在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。参数类型reqhandler不可用。类型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;
        }

在操作中我需要返回什么才能使其正常工作?

2 个答案:

答案 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;
    }
}`