我正在尝试根据here中提到的一些最佳实践来构建节点应用程序。
但是在调用特定路由时遇到问题。
这是我的server.js文件
const express = require("express");
const bodyParser = require("body-parser");
const normalizePort = require("./utils/normalize-port");
const app = express();
const port = normalizePort(process.env.PORT || 5000);
app.set("port", port);
require("./components/users");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
require("./config/database");
app.listen(port, () => console.log(`Application started on port : ${port}`));
这是我在/components/users/
const router = require("express").Router();
const user = require("./users")(router);
module.exports = { user };
这是我的 users.js 文件,与上述 index.js 处于同一目录。
module.exports = router => {
console.log("Hello at First");
router.get("/hello", (req, res) => {
console.log("hello");
res.send("hello");
});
};
现在,当我在http://localhost:5000
中启动服务器时,控制台会记录如下消息
Hello at First
Application started on port : 5000
所以,这意味着文件正在调用,对吗?但是,当我尝试连接到在http://localhost:5000/hello
中定义的users.js
时,会出现Cannot GET /hello
的错误。因为我要在 / components / users 文件夹中定义多个路由,所以我创建了index.js
文件以从单个文件导出所有路由。如何通过保持相同的结构来解决此问题?
那是为什么?为什么我的路线没有打电话?
答案 0 :(得分:1)
/components/users/indexjs
不会执行任何操作,但是会导出user
,这是您在users.js
中定义的功能。
您定义并使用了router
对象,但是无法将其装入/ app.use()
到主Express app
。因此,对GET /hello
的请求不存在。
您需要导出定义的router
对象,然后:
app.use('/some-endpoint', routerObject)
答案 1 :(得分:1)
您的/components/users/index.js
必须导出路由器对象,而不是
const router = require("express").Router();
require("./users")(router);
//require("./others")(router);
module.exports = router;
然后在您的主文件中用作中间件
const express = require("express");
const bodyParser = require("body-parser");
const normalizePort = require("./utils/normalize-port");
const app = express();
const port = normalizePort(process.env.PORT || 5000);
app.set("port", port);
const usersComponent = require("./components/users");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(usersComponent);
//or point point specific route app.use('/user', usersComponent);
require("./config/database");
app.listen(port, () => console.log(`Application started on port : ${port}`));