2017-07-22 55 views
2

我剛剛開始使用Express的節點,並嘗試使用TypeScript和Node中學習的Typescript in Angular。跟着MDN's Express Route的例子(大約下降一半),所以我可以用/auth作爲一組路線的前綴。他們使用require('./routes/auth');來獲取導出的路由器,因爲我使用import * as authRoutes from './routes/auth';等同於基於docs和stackoverflow的答案。要求vs導入Express路由器到前綴路由

import * as authRoutes from './routes/auth'; 
app.use('/auth', authRoutes); // Does not work? 

VSCode凸顯'/auth' PARAM並顯示此錯誤[ts] Argument of type '"/auth"' is not assignable to parameter of type 'RequestHandlerParams':這個,因爲我不能這樣做顯然是不正確的。

,而這樣做的工作:從MDN例

const authRoutes = require('./routes/auth'); 
app.use('/auth', authRoutes); // Does work! 

路線:

import * as express from 'express'; 
import { Router, Request, Response, NextFunction } from 'express'; 

import * as authController from '../controllers/auth.controller'; 

const router: Router = express.Router(); 

router.get('/register', (req: Request, res: Response, next: NextFunction) => { 
    authController.register(req, res); 
}); 

router.get('/login', (req: Request, res: Response, next: NextFunction) => { 
    authController.login(req, res); 
}); 

module.exports = router; 

在一個很高的層次有人能解釋我失蹤我發現這可能是答案在博客等,但他們顯然不是以幫助我理解的方式解釋。

UPDATE

現在看來似乎是一個事物的組合,因爲如果我export { router as authRoutes }那麼它的工作原理,但我不知道我是否應該這樣做或沒有,或什麼的正確方法導出並將我們的代碼導入到其他文件中。

+0

另外,如果有更好的方式來前綴的路由信息​​的任何鏈接或建議,歡迎 – mtpultz

+0

我d也想獲得解釋。我遇到了同樣的事情。 – Tyler

回答

0

在你的路由定義,出口路由器: export { router };

導入它在你的應用程序: import { router as authRoutes } from 'routes';