Express маршрутизатор по умолчанию неожиданное поведение - PullRequest
0 голосов
/ 23 марта 2020

Я столкнулся со странным поведением о маршрутизации в express (node.js).

Я пытался протестировать API.

сервер монтирует:

app.use("/", productRouter)
app.use("/test", testRouter)

внутри productRouter у меня есть конечная точка:

productRouter.post("/products", ...)

и внутри testRouter у меня есть:

testRouter.post("/test", ...)

Я застрял против того факта, что по ошибке я проводил тест против:

http://localhost:MYPORT/test

вместо:

http://localhost:MYPORT/test/test

Дело в том, что я не получаю ошибку, такую ​​как страница не найдена, или внутренняя ошибка сервера, или

Cannot /POST server

Вместо этого по умолчанию приложение перенаправляет мой неправильный запрос в / products, я провожу два часа, пытаясь понять, Почему это так?

Сервер монтирует первый productRouter.

Есть ли путь по умолчанию, который я должен указать для маршрутизаторов, чтобы избежать этого непредвиденного поведения?

Я использую машинопись.

ОБНОВЛЕНИЕ

я переопределил enpoint:

app.use("/", productRouter);
app.use("/", testRouter);

productRouter.post("/products", ...);
testRouter.post("/test", ...);

если я отправлю почтальону:

http://localhost:MYPORT/test
http://localhost:MYPORT/products

все работает нормально.

Но если я запускаю этот тест мокко:

const app = require("../src/index");

describe(" ====== Test for argumentMiddleware: a factory to check request arguments ======", () => {
  describe("requiredArgument middleware", () => {
    it("it should return error if requiredArgument is not in the body of request:", done => {
      let requestBody = {
        argument: "product"
      };
      chai
        .request(app)
        .post("/test")
        .send(requestBody)
        .end((err: Error, res: any) => {
          res.should.have.status(400);
          console.log(err.message);
          done();
        });
    });
    it.skip("it should pass if requiredArgument is in the body of request: ", done => {
      let requestBody = {
        requiredArgument: "product"
      };
      chai
        .request(app)
        .post("/test")
        .send(requestBody)
        .end((err: Error, res: any) => {
          res.should.have.status(200);
          done();
        });
    });
  });
});

Я уверен, что он делает POST против / products вместо / test, у меня есть console.log внутри / products, который выполняется. Это невероятно для меня

...