实施 Express 路由器

Implement Express Router

我有一个 Nodejs 服务器,其中包含为 HTTP methods 采用绝对路由的路由器文件,例如 /api/users/all.

// /routes/user.routes.js

module.exports = (app) => {
  app.use((req, res, next) => {
    res.header(
      "Access-Control-Allow-Headers",
      "x-access-token, Origin, Content-Type, Accept"
    );
    next();
  });

  app.get(
    "/api/users/all",
    controller.allAccess
  );
}

require() 在我的 server.js 文件中是这样的。

// server.js

require("./routes/user.routes")(app);

现在,我不想使用绝对路由,而是想实现 express.Router()

我在 user.routes.js 文件中进行了以下更改。

// /routes/user.routes.js

const express = require("express");
const router = express.Router();

module.exports = (app) => {
  app.use((req, res, next) => {
    res.header(
      "Access-Control-Allow-Headers",
      "x-access-token, Origin, Content-Type, Accept"
    );
    next();
  });

  router.get(
    "/all",
    controller.allAccess
  );
}

我在我的 routes 文件夹中创建了一个 index.js 文件,该文件使用路线和 exports router.

// /routes/index.js

const express = require("express");
const userRoutes = require("./user.routes");

const router = express.Router();
router.use("/users", userRoutes);

module.exports = router;

并在我的 server.js 文件中进行了以下更改。

// server.js

const routes = require("./routes");
app.use("/api/v1", routes);

但是我在到达路线时收到错误消息。

TypeError: app.use is not a function at module.exports

我应该怎么做才能正确实施 express.Router()

您是否忘记将 app 传递到您的 router.use("/users", userRoutes); 调用中?

目前 user.routes 不知道 app 是什么,因为您还没有实现 const app = express(); 之类的东西,需要传入它。

问题出在您的 /routes/user.routes.js 中,因为其中的应用程序变量未定义。要解决此问题,您需要将 app 替换为 router 变量,如下所示:

const express = require("express");

const router = express.Router();
router.use((req, res, next) => {
  res.header(
    "Access-Control-Allow-Headers",
    "x-access-token, Origin, Content-Type, Accept"
  );
  next();
});
router.get("/all", controller.allAccess);

module.exports = router;