使用Express路由和子路由的Node.js

4

我正在使用node.js进行开发,但是我不太明白为什么某些设置可以在一个实例中起作用,但如果稍微更改一下,它就无法在另一个实例中工作。

在我的app.js文件中,我有以下代码:

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

在我的音乐\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 - -"。
我甚至在创建的匿名函数的返回之前放置了console.log,以便知道它是否进入该函数并且我正在正确地连接父路由中的路径。并且我确实在屏幕上看到了该日志操作。
如果有任何帮助或提示,将不胜感激:)
PS:如果你想知道,我正在尝试分离不同开发工作的应用程序,我想玩。这就是为什么我正在使用musicplayer/index.js进行子路由而不是将所有内容都放在app.js中声明我的主要路由。
1个回答

1

Router.use() 需要另一个 Router 的实例。然而你的(不工作的)模块只返回一个函数。

在你的 index.js 中使用以下代码来解决这个问题:

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

1
非常感谢,那个方法可行...我一直把它当作回调函数来处理,但我猜它并不是..... - user1941432

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接