#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:
people.use
необходимо вызватьnext
функцию, чтобы вызвать следующее промежуточное программное обеспечение / маршрут в цепочке- Соединение будет работать до тех пор, пока не будут отправлены данные, поэтому
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) {
});