我有一个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文件,该文件使用路由和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()
?
问题是在你的/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();
这样的东西,需要传递它。