【问题标题】:Express.js routes with TypescriptExpress.js 使用 Typescript 路由
【发布时间】:2015-12-17 03:58:57
【问题描述】:

我想在 Typescript 中使用Express.js 来指定更模块化/OO 的代码。

我想通过实现 IRoute 接口然后将新 Route 添加到 app.use() 来实现 Route/Controller。

我面临的问题是每个操作(get、post、put、delete)本身都会返回 IRoute 接口,我不确定要返回什么。返回 操作中的return <IRoute> this; 不起作用。

带有以下错误消息的打字稿编译器响应:

类 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 中的 Route 定义为

    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;
        }

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

【问题讨论】:

    标签: node.js express typescript typescript1.6


    【解决方案1】:

    希望对你有所帮助。

    export class Admin implements IRoute {
        path: string;
        stack: any;
        constructor() {
            this.path = '/api/Admin';
        }
    
        all(handerl: RequestHandler): any {
            return <IRoute>this;
        }
        get(handerl: RequestHandler): any {
            return <IRoute>this;
        }
        post(handerl: RequestHandler): any {
            return <IRoute>this;
        }
        put(handerl: RequestHandler): any {
            return <IRoute>this;
        }
        delete(handerl: RequestHandler): any {
            return <IRoute>this;
        }
        patch(handerl: RequestHandler): any {
            return <IRoute>this;
        }
        options(handerl: RequestHandler): any {
            return <IRoute>this;
        }
        head(handerl: RequestHandler): any {
            return <IRoute>this;
        }
    }
    

    【讨论】:

      【解决方案2】:

      终于有了解决办法:

      路由控制器 允许使用方法创建控制器类作为处理请求的操作。您可以将路由控制器与 express.js 或 koa.js 一起使用。 https://github.com/pleerock/routing-controllers

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-02
        • 1970-01-01
        • 2013-05-22
        • 2016-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多