2015-06-29 1 views
4

Я использую Экспресс 4 сервера для Node.jsexpress.Router() против app.get

Существует маршрутизатор запеченные в Экспресс так:

в app.js

var router = express.Router(); 
    app.use(router); 
    app.use('/users', usersRoutes); 

в userRoutes.js:

var router = express.Router(); 

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

} 

router.get('/:user_id', function (req, res, next) { 

} 

router.post('/:user_id', function (req, res, next) { 

} 

router.put('/:user_id', function (req, res, next) { 

} 

router.delete('/:user_id', function (req, res, next) { 

} 

module.exports = router; 

, но мне очень сложно найти надежную документацию для этого типа маршрутизатора в Интернете. Существует гораздо больше документации для старого стиля использования app.get, app.post, app.put, app.delete и т. Д. Одна из наиболее запутанных вещей заключается в том, что первый аргумент (путь маршрута), по-видимому, требует, чтобы мы как программисты разделим аргумент app.use с помощью методов router.get/post/put/delete.

Например:

app.use('/users', usersRoutes); 

... это означает, что все маршруты в usersRoutes уже невидимую '/users' в начале пути - что-то я не уверен, что мне нравится еще. Это означает, что в usersRoutes.js:

var router = express.Router(); 

router.get('/users/:user_id', function (req, res, next) { //WRONG!! 

    } 

router.get('/:user_id', function (req, res, next) { //RIGHT 

    } 

Это немного сбивает с толку, но, возможно, что-то я мог оценить с более длинными путями.

Учитывая отсутствие документации для этого express.Router - я предполагаю, что это не самый предпочтительный способ, но возможно ли создать надежный бэкэнд RESTful с express.Router - и у него есть все основные HTTP-глаголы, присоединенные к Это?

Еще одна непонятная вещь: ----> в app.js у нас есть экземпляр маршрутизатора app.use(express.Router()) - как этот экземпляр маршрутизатора взаимодействует с другими? Не имеет никакого смысла на первый взгляд.

+0

Ссылка на экспресс-документацию API: http://expressjs.com/api .html – aadarshsg

+0

спасибо, но это не очень конструктивно. Например, одна проблема с express.Router заключается в том, что app.params, похоже, не работают с ним. И на самом деле не существует явного выражения express.params или router.params. –

+0

в соответствии с этим https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4 есть функция router.params, но в целом это не очень понятно, как использовать express.Router() несколько раз или даже один раз в приложении Express –

ответ

8

как ответ государств Bidhan страны А, это предпочтительный способ сделать это с экспресс и выглядит, что с курьерским 4.

Вы можете укомплектовать модулировать свой код и логику.

Например, вы можете иметь routes/APIRouter.js файл с этим кодом:

var apiRouter = express.Router(); 

apiRouter.get('/reports', controllers.getReports); 
apiRouter.get('/reports/:id', controllers.getReport); 
apiRouter.post('/reports', controllers.createReport); 
apiRouter.put('/reports/:id', controllers.updateReport); 
apiRouter.delete('/reports/:id', controllers.deleteReport); 

Также вы можете иметь /controllers/reportsController.js и, наконец, в вашем главном файле app.js или также с именем server.js прибудете:

var express = require('express'); 
var app = new express(); 
var apiRouter = require('./routes/APIRouter'); 
app.use('/api',apiRouter); 

Итак, отвечая на ваш вопрос:

  1. Да, это преф. ошибочный и как-то официальный способ сделать это.
  2. Да, вы получили весь HTTP для управления с помощью Router и вы должны использовать другой экспресс модули, основанные как: body-parser, error-handler или cookie-parser, чтобы полной, что контроль.

Примечание: предполагается, что вы уже знаете предпочтительную общую структуру каталога веб-фреймворка и выполняете экспорт модулей.

5

Я действительно думаю, что это на самом деле предпочтительный способ. Вы определяете свои маршруты отдельно и просто используете его в своем приложении. Это обеспечивает хорошее разделение проблем. Это также упрощает тестирование ваших маршрутов. И да, вы можете создать надежный бэкэнд RESTful, используя express.Router. Кроме того, он имеет все основные HTTP-глаголы, такие как get, post, put, delete, patch и т. Д., Прикрепленные к нему.

0

Express().get делает то же, что и Express.Router().get. Разница в том, что маршрутизатор лучше практикуется, потому что он позволяет нам управлять конечными точками api в качестве промежуточного программного обеспечения.

https://expressjs.com/en/api.html#router

Проблема Экспресс и JS рамки, как это то, что документация не объясняет, почему переход от использования экспресс-главный «приложение» объект. Я предполагаю, что мы должны отделять проблемы от логики маршрутов от самого основного управления приложениями (например, конфигурации, шаблона, подключения к базе данных и т. Д.).