Порядок разбора промежуточного программного обеспечения с body-parser - PullRequest
1 голос
/ 06 мая 2019

Хорошо, поэтому я пытаюсь понять 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;
  1. . / Lib / маршруты / crm_routes.ts
import {Request, Response} from "express";

export class Routes {       
    public routes(app): void {          
        app.route('/').get((req, res) => res.json({name : "ohmygodnotthisagain"}));
    }
}
  1. server.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 должен быть последним промежуточным программным обеспечением, называемым так, чтобы auth, дополнительные проверки и т. Д. Промежуточное программное обеспечение работало или есть что-то еще?

Любая помощь будет оценена по достоинству. Спасибо! PS: я довольно новичок в TS, указатели были бы великолепны.

1 Ответ

2 голосов
/ 06 мая 2019

Анализатор тела (или промежуточное программное обеспечение в целом) должен быть вызван до фактического маршрута.

Ваш маршрут не работает, потому что здесь есть орфографическая ошибка:

this.app.use(bodyParser.json);

Должно быть:

this.app.use(bodyParser.json());

Маршрут работает, когда вы помещаете этот код в последний раз, потому что он фактически никогда не выполняется (маршрут сначала сопоставляется и останавливает выполнение, поскольку вы не вызываете функцию next())

...