Express.js没有参数的嵌套路由

时间:2017-06-29 00:02:07

标签: node.js express routes

我有一台解析GET /companies/:id/populate/的Express服务器。现在,我想设置GET /companies/populate/(没有:id)。但是,我不能让这条路线起作用。如果我尝试,例如,GET /companies/all/populate/,它可以工作,因此Express路线的模式似乎是path/:key/path/:key

这是真的吗?谢谢!

编辑:添加代码。

server.js

'use strict';

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

var mongoUri = 'mongodb://localhost:27017';
mongoose.connect(mongoUri);

var db = mongoose.connection;
db.on('error', function() {
  throw new Error('Unable to connect to database at' + mongoUri);
});

// runs Express
var app = express();

// uses Cors
app.use(cors());

// uses bodyParser
app.use(bodyParser.json());

// requires Mongo models
require('./models');

// includes routes.js, passing the object 'app'
require('./routes')(app);

// listens for connections on port 3000
app.listen(3000, function() {
  console.log("Express started on Port 3000");
});

routes.js

module.exports = function(app) {

// thumbs up if everything is working
app.get('/', function(req, res, next) {
  res.send('');
  console.log('Server Running');
  res.end();
});

// companies
var companies = require('./controllers/companies');
app.get('/companies', companies.findAll);
app.get('/companies/:id', companies.findById);
app.get('/companies/:id/populate', companies.populate);
app.get('/companies/populate', companies.populateAll);
app.post('/companies', companies.add);
app.patch('/companies/:id', companies.patch);
app.delete('/companies/:id', companies.delete);
};

/controllers/companies.js

var mongoose = require('mongoose');
Company = mongoose.model('Company');

// GET /companies
// status: works, needs error handling
exports.findAll = function(req, res) {
  Company.find({}, function(err, results) {
    return res.send(results);
  });
};

// GET /companies/:id
// status: works, needs to check error handling
exports.findById = function(req, res) {
  var id = req.params.id;

  Company.findById(id, function(err, results) {
    if (results) res.send(results);
    else res.send(204);
  });
};

// POST /companies
// status: works, needs error handling
exports.add = function(req, res) {
  Company.create(req.body, function(err, results) {
    if (err) {
      return console.log(err)
    } else {
      console.log('company created');
    }
    return res.send(results);
  });
};

// PATCH /companies/:id
// status: works, needs error handling
exports.patch = function(req, res) {
  var id = req.params.id;
  var data = req.body;

  Company.update( { '_id' : id }, data, function(err, numAffected) {
    if (err) return console.log(err);
    return res.send(200);
  });
};

// DELETE /companies/:id
// status: works, needs error handling, make sure that we are sending a 204 error on delete
exports.delete = function(req, res) {
  var id = req.params.id;

  Company.remove({ '_id': id }, function(results) {
    console.log('deleted ' + id); // tester
    return res.send(results);
  });
};

// GET /companies/:id/populate
exports.populate = function(req, res) {
  var id = req.params.id;

  Company
    .findOne({ _id: id })
    .populate('contacts country')
    .exec(function (err, results) {
      if (err) return handleError(err);
      else res.send(results);
    });
};

// GET /companies/populate
exports.populateAll = function(req, res) {
  Company
    .find({})
    .populate('contacts country')
    .exec(function (err, results) {
      if (err) return handleError(err);
      else res.send(results);
    });
};

0 个答案:

没有答案