Node.js 具有快速路由和子路由

Node.js with express routing and sub routing

我正在玩 node.js,但我不太明白为什么我设置的某些东西在一个实例中有效,但如果我稍作更改,它在另一个实例中将不起作用。

在我的 app.js 我有

app.use('/musicplayer',  require('./routes/music/index'));

在我的 music\index.js 中我有

var express = require('express');
var router = express.Router();

router.use('/users', require('./users'));

module.exports = router;

在我的 users.js 我有这个 - 工作版本

var express = require('express');
var usersRouter = express.Router();
var sqllite3 = require('sqlite3').verbose();

usersRouter.get('/login', function(req, res, next) {
    res.render('music/login', { title: 'Express' });
});
module.exports = usersRouter;

但我想将我正在定义的路由封装到另一个函数中,就像这样不起作用这只会挂起页面。

我的修改版users.js不工作

var express = require('express');
var usersRouter = express.Router();
var sqllite3 = require('sqlite3').verbose();

var router = function () {
    usersRouter.get('/login', function (req, res, next) {
        res.render('music/login', {title: 'Express'});
    });
    return usersRouter;
}
module.exports = router;

在控制台中,我可以看到它尝试获取但从未被路由,我看到了这个 "GET /musicplayer/users/login - - ms - -"。

我什至在我创建的匿名函数中的 return 之前放了一个 console.log 以知道它正在进入那里并且我正在从父路由连接路径。我确实在屏幕上点击了日志操作。

如有任何帮助或提示,我们将不胜感激:)

PS 如果您想知道我正在尝试为我想玩的不同开发工作分离出应用程序。所以这就是为什么我用 musicplayer/index.js 做子路由,而不是把所有东西都放在 app.js 中来声明我的主要路由。

Router.use() 需要另一个 Router 的实例。但是你的(非工作)模块只有 returns 一个函数。

在您的 index.js 中使用它来解决问题:

router.use('/users', require('./users')());