好的,所以我试图理解Node.js和Typescript,所以我尝试使用如下的简单脚本;
import * as express from "express";
import * as bodyParser from "body-parser";
import { Routes } from "./routes/crm_routes";
class App {
public app;
public routePrv : Routes = new Routes();
constructor() {
this.app = express();
this.routePrv.routes(this.app);
this.config();
}
private config():void {
this.app.use(bodyParser.json);
this.app.use(bodyParser.urlencoded({ extended: false }));
}
}
export default new App().app;
import {Request, Response} from "express";
export class Routes {
public routes(app): void {
app.route('/').get((req, res) => res.json({name : "ohmygodnotthisagain"}));
}
}
import app from "./app";
app.listen(3000, () => console.log('Example app listening on port 3000!'));
现在我正在玩耍,所以我将this.config()放在this.routePrv.routes(this.app)之上,并且我的服务器完全停止路由到/。 当我按上述顺序重新放置它们时,它又开始工作。
现在,我试图理解其原因,并且感到困惑,是因为body-parser需要成为最后一个调用的中间件,以便auth,额外的检查等中间件能够正常工作,或者还有其他东西吗?
任何和所有帮助将不胜感激。谢谢! PS:我对TS很陌生,指针会很棒。
答案 0 :(得分:2)
应在实际路由之前调用主体解析器(或一般的中间件)。
您的路线不起作用,因为您在这里遇到拼写错误:
this.app.use(bodyParser.json);
应该是:
this.app.use(bodyParser.json());
当您将代码放在最后时,该路由才起作用,因为它从未真正执行过(该路由首先被匹配并停止执行,因为您没有调用next()
函数)