了解nodejs中的模块/路由

时间:2013-03-04 22:01:36

标签: node.js express

我是nodejs的新手。我想建立一个包含多个类别的休息服务。

> app.js 
var express = require('express')
  , http = require('http')
  , routes = require('./routes')
  , path = require('path');

app = express();
app.use(app.router);

app.get('*',routes.index);

app.listen(3000);
console.log('Express app started on port 3000');

> routes/index.js
var sites = [
    'sve',
    'ice'
];

exports.index = function(req,res){
    var url = req.url.split('/');
    for (i in sites) {
        app.get('/' + sites[i] + '/*',require('./' + sites[i]));
    }
};  

> routes/sve/index.js
module.exports = function(req, res){
  console.log('sve')
  res.end({category:'sve'});
};

> routes/sve/index.js
module.exports = function(req, res){
  console.log('sve')
  res.end({category:'sve'});
};

当我运行“节点应用程序”时,我得到“Express应用程序在端口3000上启动”并且服务器正在运行但是当我访问“localhost:3000 / sve / test”时我没有响应或“localhost:3000 / ice /测试“甚至”localhost:3000 / abc / test“。 甚至没有在控制台中。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

正如我的评论中提到的,我认为您正在寻找一种使用子应用程序(如Rails引擎)的方法来模块化您的应用程序。如果是这种情况,您应该使用app.use()来安装子应用程序。

上面有一个很好的视频here

视频中未提及的最后一件相关内容,您可以相对安装子应用。例如:

var subapplication = require('./lib/someapp');

app.use('/base', app.use(subapplication));

这会将子应用程序中的路由视为来自'/ base'路径。例如,在此应用程序中安装时,子应用程序中捕获'/ a'的路由将匹配对'/ base / a'的请求。