如何将路由功能移动到express.js中的另一个js文件?

时间:2014-08-11 06:39:10

标签: node.js mongodb express

我有以下代码(app.js):

var express = require('express');
var bodyParser = require('body-parser');
var mongoskin = require('mongoskin');

var routes = require('./routes/index');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

var db = mongoskin.db('mongodb://@localhost:27017/testdb', {safe:true})

app.param('orders', function(req, res, next, collectionName){
  req.collection = db.collection(collectionName)
  return next()
})

app.use('/', routes);

app.get('/api/:orders', function(req, res, next) {
  req.collection.find({} ,{limit:10, sort: [['_id',-1]]}).toArray(function(e, results){
    if (e) return next(e)
    res.send(results)
  })
})

哪个有效。我要做的是将路径(/ api /:order)移动到另一个js文件(routes / api.js)。这是代码:

var express = require('express');
var bodyParser = require('body-parser');
var mongoskin = require('mongoskin');

var routes = require('./routes/index');
var api = require('./routes/api');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

var db = mongoskin.db('mongodb://@localhost:27017/testdb', {safe:true})

app.param('orders', function(req, res, next, collectionName){
  req.collection = db.collection(collectionName)
  return next()
})

app.use('/', routes);
app.use('/api', api);

/routes/api.js文件:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
  res.send('respond with a resource');
});

// return all orders
router.get('/:orders', function(req, res, next) {
  req.collection.find({} ,{limit:10, sort: [['_id',-1]]}).toArray(function(e, results){
    if (e) return next(e)
    res.send(results)
  })
})

module.exports = router;

我收到以下错误:

  

TypeError:无法调用方法'找到'未定义的

有人可以告诉我我的代码有什么问题吗?感谢。

1 个答案:

答案 0 :(得分:0)

我认为req.collection未定义,因为app.param('orders')未针对其他路由器执行。