【问题标题】:Can't connect routes in Express app无法在 Express 应用中连接路线
【发布时间】:2017-07-13 19:04:28
【问题描述】:

我有以下结构

project

-app/

--controllers/

---home.js

--models/

---home.js

--views/

---home.html

-db/

--db.js

-index.js

我的控制器 home.js 看起来像这样:

var express = require('express');
var router = express.Router();
var database = require('../models/home');
var path = require('path');

router.get("/", function(request, response) {
    response.sendFile(path.join(__dirname, '../views', 'home.html'));
});

module.exports = router;

现在我想让这条路线有用,所以在我的index.js 中有:

var express = require('express');
var app = express();
var port = 3000;

app.use(require('./app/controllers/home')); //<-- this is what I ask for

app.listen(3000, function(err ) {
    //......
})

但现在我有更多的路线到“家”,所以不是

 app.use(require('./app/controllers/home'));
 app.use(require('./app/controllers/about'));
 app.use(require('./app/controllers/etc'));

我读到我可以使用:

app.use(require('./app/controllers/'));

但是我得到了找不到模块的错误。您能建议我如何轻松使用所有路线吗?谢谢:)

【问题讨论】:

  • 添加app/controllers/index.html 导出所有路由器。这将允许您require('./app/controllers')
  • app.use(require('./app/controllers/home')); 这一行似乎不正确。你确定你没听错吗?
  • @wilusdaman 我相信你的意思是index.js。是的,这解决了我的问题。但是,我仍然不明白为什么 'require('./app/controllers')' 和 'require('./app/controllers/index')' 都有效。我认为第一个不应该工作..你能解释一下吗?
  • 啊,是的,我的意思是index.jsrequire('./app/controllers/index') 就像要求任何其他文件/模块一样工作。 require('./app/controllers') 也有效,因为它是 feature of Node's module system(普通 JS)。

标签: javascript node.js express routes


【解决方案1】:

如果我理解您的问题,您正在尝试将路由器路由到不同的相对路径。 您可以通过将该路径作为第一个参数传递来设置相对路径。然后,路由器内部使用 app.get/use/... 的任何路由都将从该相对路径开始。

在 index.js 中

app.use("/home", require('./app/controllers/home'));
app.use("/about", require('./app/controllers/about'));
app.use("/etc", require('./app/controllers/etc'));

./app/controllers/home 和其他路由里面

router.get("/", ...) // this will be located at localhost/home
router.get("/myhouse, ...) // this will be located at localhost/home/myhouse

另外值得一提的是,您可以在路由器内部路由路由器

router.use("/", require('path/to/another-router.js'))

【讨论】:

  • 这个app.get("/", ...)不应该是router.get("/", ...)吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 2018-03-05
  • 2020-02-20
相关资源
最近更新 更多