2017-11-13 1 views
0

でexpress.Requestを拡張します。、私は活字体に新しいですので、私と一緒にクマプロジェクト

私は、ExpressベースのWebサービスに取り組んでいます。私は初期のミドルウェアの一部にリクエストオブジェクトのロギングオブジェクトを設定させ、後でリクエストハンドラフローで使用させたいと考えています。

ミドルウェアと、最終的な要求ハンドラは、別のファイルで構成されています。

express.Requestオブジェクトを集中的に拡張して、warning型を持たずにこのログオブジェクトを使用できるようにするにはどうすればよいでしょうか?

急行インスタンス化し、私のログオブジェクトを設定したファイル:

const app = express(); 
const log = console; 

app.use((req: express.Request, res: express.Response, next: express.NextFunction) => { 
    req.log = log; 
    next(); 
}); 

要求ハンドラ:

(req: express.Request, res: express.Response): void => { 
    req.log("request was made"); 
    res.send(); 
} 

答えて

2

あなたが拡張することができますがちょうど私が持っていると欲しいものを表示する

このようなexpress.Requestオブジェクト:

declare global { 
    namespace Express { 
    interface Request { 
     log(...params: any[]): void 
    } 
    } 
} 

それとも、あなたはバニラRequestタイプとあなたの増補版との間に明確な区別をしたい場合は、このような何かができます素晴らしいです

interface RequestWithLogging extends express.Request { 
    log(...params: any[]): void 
} 

app.get('/', (req: RequestWithLogging, res: express.Response) => { 
    req.log('Log something') 
    res.send('Hello World!') 
}) 
+0

を!私のプロジェクトでは別の.dtsファイルに入っているのでどこでも汚染されていません。 病気テストこのうちしばらくの間、および任意の落とし穴があるかどうかを確認に。 :) – ath88

関連する問題