node.js - Express.js-rutter med Typescript
Jag vill använda Express.js med Typescript för att specificera koden mer modulärt/OO.
Jag vill implementera en Route/Controller genom att implementera IRoute-gränssnittet och sedan lägga till den nya Route i app.use().
Problemet jag står inför är att varje operation (get, post, put, delete) i sig returnerar IRoute-gränssnittet och jag är inte säker på vad jag ska returnera. Att returnera return <IRoute> this; i en operation fungerar inte.
TypeScript-kompilatorn svarar med följande felmeddelande:
Klassen MessurmentsController implementerar felaktigt gränssnittet IRoute. Typerna för egenskapen
allär inkompatibla. Typen(req: Request, res: Response, next: Function) => voidkan inte tilldelastyp (...handler: RequestHandler[]): IRoute. Typerna för parametrarnareqochhandlerär inkompatibla. TypenRequestkan inte tilldelas typenRequestHandler.
/// <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('');
}
}Rutten i d.ts definieras som
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;
}Någon aning om vad jag behöver returnera i en operation för att få detta att fungera?
Svar #1
Slutligen dök en lösning upp:
routing-controllers gör det möjligt att skapa kontrollklass med metoder som handlingar som hanterar förfrågningar. Du kan använda routing-controllers med express.js eller koa.js. https://github.com/pleerock/routing-controllers
Svar #2
Jag hoppas att detta kommer att hjälpa dig.
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;
}
}
