Express.js Сбой кода примера раздела 4 маршрутизатора

#javascript #node.js #express #directory

#javascript #node.js #экспресс #каталог

Вопрос:

РЕДАКТИРОВАТЬ Для тех из вас, кто только что обнаружил это, в документации для Express в этом примере ошибка. Вам нужно использовать next(); инструкцию в части:

 people.use(function(req, res, next) {
    next();//Added to make example work
});
  

Оригинальное сообщение

Если вы посмотрите на документацию по Express 4.0 в разделе «Маршруты», предлагается метод использования маршрутизатора для разделения приложения. Я попытался создать пример приложения.

app.js

 var express = require('express');
var app = express();
var port = process.env.PORT || 8080;

app.route('/').get(function(req, res, next) {
    res.send('Hello World');
});

//Try to use modular routes ...
app.use('/people', require('./routes/people').people);

//Start up server
app.listen(port);
console.log('Magic happens on port '   port);
  

people.js

 var express = require('express'); //<- Included because it throws an error otherwise
var people = express.Router();

people.use(function(req, res, next) {
});

people.get('/', function(req, res, next) {
});

module.exports.people = people;
  

Структура каталогов

 /
app.js
/routes
    people.js
  

Когда я запускаю проект и перехожу к «localhost: 8080», я получаю ожидаемый ответ «Привет, мир». Однако, когда я захожу на ‘localhost: 8080 / people’, браузер просто останавливается и запускается. Поскольку это пример кода из самого проекта, я удивлен, что это не работает. Есть мысли?

Спасибо!

Ответ №1:

  1. people.use необходимо вызвать next функцию, чтобы вызвать следующее промежуточное программное обеспечение / маршрут в цепочке
  2. Соединение будет работать до тех пор, пока не будут отправлены данные, поэтому people.get('/', ...) необходимо отправить что-то обратно клиенту

Следующее people.js должно обеспечить желаемые результаты:

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

people.use(function(req, res, next) {
  next();
});

people.get('/', function(req, res, next) {
  res.send('people!');
});

module.exports.people = people;
  

Комментарии:

1. Спасибо за указатель, Тим. Просто чтобы прояснить мое понимание, порядок вызываемых маршрутов зависит от их исходного порядка, верно? Я планирую сделать эту архитектуру основой моего нового приложения. Есть ли какая-либо причина не делать этого?

2. @DiodeDan: порядок вызываемых маршрутов зависит от их исходного порядка, исправьте, это правильно.

Ответ №2:

поскольку вы просто задаете маршрут / , не задавайте маршрут /people в people.js , вы должны написать:

people.get('/people', function(req, res, next) {
});