Ответ 1
Вы определяете 2 маршрута с помощью одного и того же метода и пути, что является конфликтом в отношении hapi-маршрутизатора. Вот почему вы получаете сообщение об ошибке.
Если файл не найден обработчиком directory
, он будет отвечать по ошибке 404 по умолчанию.
Что вы можете сделать, это перехватить это с помощью обработчика onPreReponse
, который проверяет, является ли ответ ответом на ошибку (a Boom объект), и если да, то ответьте, как хотите. В вашем случае перенаправлением на /
:
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 4000 });
server.route([{
method: 'GET',
path: '/',
handler: function (request, reply) {
reply('Welcome home!');
}
}, {
method: 'GET',
path: '/{p*}',
handler: {
directory: {
path: 'public',
listing: false
}
}
}
]);
server.ext('onPreResponse', function (request, reply) {
if (request.response.isBoom) {
// Inspect the response here, perhaps see if it a 404?
return reply.redirect('/');
}
return reply.continue();
});
server.start(function () {
console.log('Started server');
});
Рекомендуемое чтение:
- hapi-запрос жизненного цикла и точки расширения: http://hapijs.com/api#request-lifecycle
- Объект ответа: http://hapijs.com/api#response-object