路由页面时出现问题

时间:2014-09-02 19:28:57

标签: javascript node.js express

我在使用此脚本时出现问题

// App.js ( shrink )

var controller = require('./controller');

app.get('/', controller.index);

app.get('/home', controller.home);

// /controller/index.js

var meta = {

    title: 'index',
    description: ''
}

exports.index = function(req,res){

    res.render('index', {

        meta: meta
    });
}

// /controller/home.js

var meta = {

    title: 'glibet',
    description: ''
}

exports.home = function(req,res){

    res.render('home', {

        meta: meta
    });
}

它返回给我这个错误:"错误:Route.get()需要回调函数但得到[对象未定义]"

奇怪的是,如果我在没有 home 的情况下单独使用 app.get(' /',controller.index); ,它的效果会很好

我在代码中尝试了几个更正/替代方案,维护系统调用控制器/文件的方式,但它似乎没有修复代码,我会非常感谢任何帮助。

PS:我试图避免为每个控制器文件设置一个变量,避免像这样的代码;

var homeController = require('./controllers/home');
var userController = require('./controllers/user');

app.get('/', homeController.index);
app.get('/login', userController.getLogin);

2 个答案:

答案 0 :(得分:0)

当您需要./controller时,Node首先会查找名为controller的文件。如果做不到这一点,它会在目录index.js中查找名为controller的文件。

您不需要以这种方式使用require()来要求目录中的每个文件。

您可以使用require-dir等插件来实现此目的。但是,我的建议是分别要求每个文件,以便您确切知道您的页面可用的内容 - 这可以防止您不小心将文件留在路径目录中的副作用,而这些文件是您不希望的主要应用控制器。

答案 1 :(得分:0)

您正尝试将require js文件目录作为对象。如果您希望将所有控制器文件分开但将它们表示在应用程序中的一个对象中,则可以执行以下操作:

// /controller/controllers.js

var home = require('./home');
var index = require('./index');
module.exports = {
    home: home.home,    
    index: index.index
}

要求' ./ controller / controllers'您可以将所有控制器端点组织在不同的文件中,同时可以在一个对象中访问。