由于某些原因(我怀疑这与此有关),当我在服务器类之外添加路由并向其发出请求时,路由会忽略中间件。有什么解决办法吗??
我知道我可以将路由放在Server类中,一切都会正常工作,但我需要它这样工作。
这个小例子很好地反映了我原来的问题。
const express = require("express");
const cors = require("cors");
const axios = require("axios");
class Server {
constructor() {
this.app = express();
}
loadMiddlewares() {
this.app.use(cors());
this.app.use((req, res, next) => {
console.log("MIDDLEWARE WORKING!");
next();
});
this.app.use(express.json());
}
init() {
this.loadMiddlewares();
this.app.post("/post", function (req, res) {
/* MIDDLEWARES WORKS */
res
.status(200)
.send(`WORKING: Here is your body ${JSON.stringify(req.body)}`);
});
this.app.listen(3001);
console.log("Server runinng");
}
}
const server = new Server();
server.app.post("/post2", function (req, res) {
/* MIDDLEWARES NOT WORKING */
res
.status(200)
.send(`NOT WORKING: Here is your body 2 ${JSON.stringify(req.body)}`);
});
server.init();
setTimeout(() => {
axios({
url: "https://6uiyik.sse.codesandbox.io/post",
method: "post",
data: {
hi: "HIII!!"
}
}).then((res) => console.log(res.data));
axios({
url: "https://6uiyik.sse.codesandbox.io/post2",
method: "post",
data: {
hi: "HIII!!"
}
}).then((res) => console.log(res.data));
}, 1000);https://codesandbox.io/s/wonderful-sun-6uiyik?file=/index.js:0-1238
发布于 2022-10-08 21:13:48
在调用/post2之前添加init处理程序,以便在该路由之后注册中间件。订单在这里很重要,这意味着请求不会首先到达中间件。
尝试将服务器启动和加载中间件分成两个单独的函数,这样您就可以在中间件之后,但在服务器启动之前注册处理程序。
然而,正如另一位评论者所言,这门课并不是真正需要的,也不是用特快的方式组成路线的正常方式。不过..。
const express = require("express");
const cors = require("cors");
const axios = require("axios");
class Server {
constructor() {
this.app = express();
}
loadMiddlewares() {
this.app.use(cors());
this.app.use((req, res, next) => {
console.log("MIDDLEWARE WORKING!");
next();
});
this.app.use(express.json());
}
loadRoutes() {
this.loadMiddlewares();
this.app.post("/post", function (req, res) {
/* MIDDLEWARES WORKS */
res
.status(200)
.send(`WORKING: Here is your body ${JSON.stringify(req.body)}`);
});
}
listen() {
this.app.listen(3001);
console.log("Server runinng");
}
}
const server = new Server();
server.loadRoutes()
server.app.post("/post2", function (req, res) {
res
.status(200)
.send(`NOT WORKING: Here is your body 2 ${JSON.stringify(req.body)}`);
});
server.listen();
setTimeout(() => {
axios({
url: "https://6uiyik.sse.codesandbox.io/post",
method: "post",
data: {
hi: "HIII!!"
}
}).then((res) => console.log(res.data));
axios({
url: "https://6uiyik.sse.codesandbox.io/post2",
method: "post",
data: {
hi: "HIII!!"
}
}).then((res) => console.log(res.data));
}, 1000);https://stackoverflow.com/questions/74000393
复制相似问题