Я столкнулся со странным поведением о маршрутизации в 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, который выполняется. Это невероятно для меня