首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特快专递中间件在某一类别之外不起作用。

特快专递中间件在某一类别之外不起作用。
EN

Stack Overflow用户
提问于 2022-10-08 20:40:00
回答 1查看 31关注 0票数 0

由于某些原因(我怀疑这与此有关),当我在服务器类之外添加路由并向其发出请求时,路由会忽略中间件。有什么解决办法吗??

我知道我可以将路由放在Server类中,一切都会正常工作,但我需要它这样工作。

这个小例子很好地反映了我原来的问题。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-08 21:13:48

在调用/post2之前添加init处理程序,以便在该路由之后注册中间件。订单在这里很重要,这意味着请求不会首先到达中间件。

尝试将服务器启动和加载中间件分成两个单独的函数,这样您就可以在中间件之后,但在服务器启动之前注册处理程序。

然而,正如另一位评论者所言,这门课并不是真正需要的,也不是用特快的方式组成路线的正常方式。不过..。

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74000393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档