node.js - 使用 body-parser 进行中间件解析的顺序

标签 node.js typescript express body-parser

好吧,我想了解 Node.js 和 Typescript,所以我尝试编写一个简单的脚本,如下所示;

  1. 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/

    相关文章:

    typescript - Nativescript:如何扩展 ObservableArray?

    javascript - 如何在后台运行服务器上的 Typescript 文件?

    html - typescript 错误 类型 'HTMLElement' 上不存在属性。任何

    node.js - 表达 cookie-Sessions 和 connect-cookie-session 之间的区别

    node.js - 找不到 module express,如何安装它以使其在全局范围内可用?

    node.js - 将 Express 应用程序部署到 Azure 应用程序服务未响应端口 : 8080 上的 HTTP ping

    javascript - 在 node.js 上对具有低 RAM 的大文件进行排序

    javascript - Heroku 应用程序无法运行(部署问题?)

    javascript - 快线功能未提升

    javascript - Async.forEach 并行运行,但它丢失了原始数组中的排序顺序