2014-09-18 3 views
2

Я создал базовое приложение Node/Express и пытаюсь реализовать маршруты на основе разделения логики в разных файлах.Ошибка 404 при маршрутизации с использованием Express и Nodejs

В Server.js

var app = express(); 

var router = express.Router(); 
require('./app/routes/users')(router); 
require('./app/routes/events')(router); 
require('./app/routes/subscribe')(router); 
require('./app/routes/login')(router); 
app.use('/api',router); 

В ./app/routes/users.js

module.exports = function(router){ 

    router.route('/users/') 
     .all(function(req, res, next) { 
      // runs for all HTTP verbs first 
      // think of it as route specific middleware! 
     }) 
     .get(function(req, res, next) { 
      res.json(req.user); 
     }) 
     .put(function(req, res, next) { 
      // just an example of maybe updating the user 
      req.user.name = req.params.name; 
      // save user ... etc 
      res.json(req.user); 
     }) 
     .post(function(req, res, next) { 
      next(new Error('not implemented')); 
     }) 
     .delete(function(req, res, next) { 
      next(new Error('not implemented')); 
     }) 

    router.route('/users/:user_id') 
     .all(function(req, res, next) { 
      // runs for all HTTP verbs first 
      // think of it as route specific middleware! 
     }) 
     .get(function(req, res, next) { 
      res.json(req.user); 
     }) 
     .put(function(req, res, next) { 
      // just an example of maybe updating the user 
      req.user.name = req.params.name; 
      // save user ... etc 
      res.json(req.user); 
     }) 
     .post(function(req, res, next) { 
      next(new Error('not implemented')); 
     }) 
     .delete(function(req, res, next) { 
      next(new Error('not implemented')); 
     }) 
} 

Все маршруты возвращаются 404-Not Found.

Есть ли у кого-нибудь предложения по наилучшему способу модульной маршрутизации в Express Apps?

Можно ли загружать несколько маршрутов в одном экземпляре express.Router()?

------------ Edit ---------------

О дальнейшем Testing

Я удалось отладить локальный экземпляр express.Router(), а стек уровня маршрутизации в локальной переменной «маршрутизатор» обновляется маршрутами из отдельных модулей.

Последняя строка:

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

также успешно обновление глобального экземпляра приложения объект внутреннего app.router с правильными слоями маршрутизации от локального экземпляра маршрутизатора, переданного ей.

Я думаю, проблема заключается в том, что Маршруты для '/ api' находятся под номером 13-14 в стеке слоя маршрутизации, так что существует некоторая проблема в стеке с некоторой другой маршрутизацией промежуточного слоя, не пропускающей маршруты до конец ... Мне просто нужно отследить это, я думаю.

ответ

2

две проблемы:

(1) Похоже, router.route().all не возвратил результат, или вызов маршрута next() в слое.

Здесь есть статья. https://groups.google.com/forum/#!topic/express-js/zk_KCgCFxLc

Если удалить .all или вставить next() в функцию .all, маршрутизация работает правильно.

(2) задний '/' в определении маршрута вызывало другую ошибку т.е.router.route('/users/') должно быть router.route('/users') Чернокнижник важен.

0

Попробуйте следующий способ,

Server.js

app.use('/users' , require('app/routes/users')); 
app.use('/events' , require('app/routes/events')); 
app.use('/subscribe' , require('app/routes/subscribe')); 

В вас приложение/маршруты/users.js

var router = express.Router(); 

router.get('/', function (req, res, next) { 
//code here 
}) 

router.get('/:id', function (req, res, next) { 
//code here 
}) 

module.exports = router; 
+0

Я понимаю, что это сработает, но я хотел бы узнать, может ли он быть реализован с использованием одного экземпляра express.Router(). Для этой реализации требуется, чтобы базовый URL был явно определен для каждого маршрута. Используя один экземпляр express.Router(), я надеюсь установить базовый URL-адрес в '/ api' и добавить маршруты поверх этого. – drunkmeerkat

Смежные вопросы