好吧,我想了解 Node.js 和 Typescript,所以我尝试编写一个简单的脚本,如下所示;
- app.ts
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;
- ./lib/routes/crm_routes.ts
import {Request, Response} from "express";
export class Routes {
public routes(app): void {
app.route('/').get((req, res) => res.json({name : "ohmygodnotthisagain"}));
}
}
- 服务器.ts
import app from "./app";
app.listen(3000, () => console.log('Example app listening on port 3000!'));
现在我正在玩,所以我把 this.config() 放在 this.routePrv.routes(this.app) 之上,我的服务器完全停止路由到/。 当我将它们按上述顺序放回时,它再次开始工作。
现在我试图理解其中的原因,但很困惑,是因为 body-parser 需要成为最后一个调用的中间件,以便身份验证、额外检查等中间件完成工作还是还有其他原因?
任何和所有的帮助将不胜感激。谢谢! PS:我对 TS 还很陌生,指针会很棒。
最佳答案
正文解析器(或一般的中间件)应该在实际路由之前调用。
您的路线不起作用,因为此处有拼写错误:
this.app.use(bodyParser.json);
应该是:
this.app.use(bodyParser.json());
当您将该代码放在最后时,该路由会起作用,因为它从未实际执行(该路由首先匹配并停止执行,因为您没有调用 next()
函数)
关于node.js - 使用 body-parser 进行中间件解析的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56012274/