模块化NodeJs路由

时间:2014-06-05 02:26:37

标签: node.js express

这是我的第一个NodeJS项目。我想设计一个模块化的REST API。但事情并不顺利,任何对localhost/api/*的调用都会被忽略,而只是渲染索引 我怎么能解决这个问题?非常感谢您的宝贵时间。 server.js

var express = require('express');
var app = express();
require('./server/config/express')(app);
require('./server/config/routes')(app);
app.listen(port);

./服务器/配置/表达

var express = require('express'),
    config = require('./config');

module.exports = function(app) {
    app.configure( function() {
        app.use(app.router);
    });
};

./服务器/配置/路由

module.exports = function(app) {
    app.use('/api', require('../route/api')(app));
    app.get('*', function(req, res) {
    res.render('index');
});
};

../路线/ API

module.exports = function(app) {
    app.use('/student', require('../route/student'));
    app.use('/teacher', require('../route/teacher'));
};

../路线/学生

module.exports = function(){
  var express = require('express');
  var router = new express.Router();

  router.get('/', function(req, res){
      res.send("api/student/");
  });

  router.get('/courses', function(req, res){
    res.send("api/student/courses");
  });

  return router;
}();

1 个答案:

答案 0 :(得分:0)

你是正确的。基本上为每个路段创建一个新的快速应用程序,导出。这样,您可以拥有无​​限数量的彼此分开的部分,并且它使用最少量的代码。新的应用程序将处理其余部分。遵循这种模式:

app.use('/<section>', require(<path to the app for the requested section >));

所以在你的情况下,你应该有这样的东西:

./服务器/配置/ routes.js

app.use('/api', require('../route/api')); //handler for /api
app.get(...)

../路线/ api.js

var express = require("express");
var app = module.exports = express(); 
app.use('/student', require('./student')); //handler for /api/student
app.get(..);

../路线/ student.js

var express = require("express");
var app = module.exports = express();  //No more handlers
app.get('/:id', function(req, res){  //get api/student/1
    res.send({student_id : req.params.id}); 
});