在单独的文件中定义时,Route未调用

时间:2018-07-06 03:38:15

标签: node.js express routes

我正在尝试根据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/

中的 index.js 文件
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文件以从单个文件导出所有路由。如何通过保持相同的结构来解决此问题?

那是为什么?为什么我的路线没有打电话?

2 个答案:

答案 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}`));