【发布时间】:2021-10-28 07:57:54
【问题描述】:
我正在按照教程 here 设置一个简单的 express-typescript 应用程序。但由于某种原因,我的路线没有按预期工作。我看到很多关于这个主题的问题,但没有一个与我的问题完全匹配的问题。如果这个问题已经被询问和回答,那么抱歉。
app.ts
import express from 'express';
import bodyParser from 'body-parser';
import ngrok from 'ngrok'
import IController from './controller.interface'
import SessionController from './sessions/sessions.controller'
class App {
public app: express.Application;
public port: number;
constructor(controllers: IController[], port: number) {
this.app = express();
this.port = port;
this.initializeMiddlewares();
this.initializeControllers(controllers);
}
private initializeMiddlewares() {
this.app.use(bodyParser.json());
}
private initializeControllers(controllers: IController[]) {
controllers.forEach((controller) => {
console.log(controller.path);
console.log(controller.router);
this.app.use(controller.path, controller.router);
});
}
public listen() {
this.app.listen(this.port, () => {
console.log(`App listening on the port ${this.port}`);
ngrok.connect({proto: 'http', addr: this.port});
});
}
}
export default App;
controller.interface.ts
import * as express from 'express';
interface IController {
path: string,
router: express.Router
}
export default Controller;
server.ts
import App from './app';
import SessionController from './sessions/sessions.controller';
const app = new App(
[
new SessionController()
],
3999
);
app.listen();
sessions/session.interface.ts
interface Session {
sessionId: string;
}
export default Session;
sessions/sessions.controller.ts
import * as express from 'express';
import Session from './session.interface';
import IController from '../controller.interface'
class SessionController implements IController{
public path = '/sessions';
public router = express.Router();
private session: Session =
{
sessionId: "ABCD12345"
};
constructor() {
this.intializeRoutes();
}
public intializeRoutes() {
console.log("Route initialised");
this.router.get(this.path, this.getSession);
}
getSession = (request: express.Request, response: express.Response) => {
console.log("Get session call");
response.send(this.session);
}
}
export default SessionController;
输出
[nodemon] 2.0.12
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: ts,json
[nodemon] starting `ts-node src/server.ts`
Route initialised
/sessions
[Function: router] {
params: {},
_params: [],
caseSensitive: undefined,
mergeParams: undefined,
strict: undefined,
stack: [
Layer {
handle: [Function: bound dispatch],
name: 'bound dispatch',
params: undefined,
path: undefined,
keys: [],
regexp: /^\/sessions\/?$/i,
route: [Route]
}
]
}
App listening on the port 3999
没有其他错误、日志语句或警告。
但是GET http://localhost:3999/sessions
不调用getSession 方法,我在屏幕上看到Cannot GET /sessions 消息。
【问题讨论】:
标签: node.js typescript express