2016-09-09 4 views
0

Прогуливаясь по this tutorial, я столкнулся с проблемой, когда методы маршрутизатора не будут работать. Используя npm start и доступ к localhost: 3000/api/щенки получает ошибку 404. Однако, когда я изменилЭкспресс router.get не работает, но app.get работает

var router = express.Router(); 
router.get('/api/puppies', db.getAllPuppies); 

в

var app = express(); 
app.get('/api/puppies', db.getAllPuppies); 

и бежать с node index.js, печатает данные, как и ожидалось. Я попытался также поставить в начале своего файла

app.use(express.static(__dirname + '/api/')); 

но без радости. Это как-то связано с npm start? В какой-то момент я буквально копировал/вставлял код из учебника, и все же получаю 404.

ответ

1

Маршрутизатор должен быть подключен к вашему экспресс-приложению, чтобы быть частью вашего сервера.

app.use(yourRouter); 

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

app.use('/somePath', yourRouter); 

Без этого, это просто объявленный и настроенный маршрутизатор, который не подключен ни к одному серверу.

Экспресс-документация examples here.

В данном учебном пособии не отображается эта часть использования маршрутизатора.

+0

Так что 'app.use ('/ api', маршрутизатор); router.get ('/ api/щенки', db.getAllPuppies); 'кажется, имеет смысл. Однако я все еще получаю 404. – 1252748

+0

@ 1252748 - Нет. Вы регистрируете обработчики URL-адресов для '/ api/api/щенков'. Удалите одну из спецификаций '/ api'. FYI, код, о котором идет речь, из этого учебника находится здесь: https://github.com/mjhea0/node-postgres-promises/blob/master/app.js#L24. В учебнике используется 'app.use ('/', routes);'. – jfriend00

+0

Хм. Он немного усложнил ситуацию. Тогда ваше предложение следующее: 'app.use ('/ api', router); router.get ('/ puppies', db.getAllPuppies); 'Это та же ошибка. – 1252748