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

时间:2016-10-05 00:44:20

标签: node.js express url-routing

我正在使用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;

但是我想将我定义的路由封装到另一个函数中,比如 not working 这只是挂起页面。

我的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和nevers被路由我看到这个“GET / musicplayer / users / login - - ms - - ”。

我甚至在我创建的匿名函数返回之前放置了一个console.log,以便知道它正在进入那里并且我正在从父路径向上挂钩路径。我确实将该日志操作发送到屏幕上。

任何帮助或提示将不胜感激:)

如果你想知道我正在尝试将我想要玩的不同开发工作的应用程序分开,那么PS就是PS。所以这就是我使用musicplayer / index.js进行子路由的原因,而不是仅仅将所有内容都放在app.js中以声明我的主要路由。

1 个答案:

答案 0 :(得分:1)

Router.use()需要另一个Router的实例。但是,您的(非工作)模块仅返回一个函数。

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

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