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
);
}

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

// 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文件,该文件使用路由和exportsrouter

// /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()?

问题是在你的/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;

您刚刚忘记将app传递给router.use("/users", userRoutes);调用吗?

目前user.routes不知道app是什么,因为你还没有实现像const app = express();这样的东西,需要传递它。

最新更新