неправильный URL вызывает бесконечное перенаправление l oop в Hapijs - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть следующая настройка с Hapi js 18.4.x (показывает только соответствующий код ниже)


// ./index.js
await server.register(
    { plugin: require('./api/v2/index.js'), options: {} },
    { routes: { prefix: '/v2' } }
);


// ./api/v2/index.js
exports.plugin = {
    register: async function(server, options) {

        await server.register([
            { plugin: require('./resources/resource1') },
            { plugin: require('./resources/resource2') },
            { plugin: require('./resources/resource3') }

            // and so on
        ]);

    }
};


// ./api/v2/resources/resource1.js 
// (similar code in other resource{\d}.js files)

module.exports = return {
    plugin: {
        name: resource1,
        register: function(server, options) {

            server.route([{ 
                path: '/resource1',   
                method: 'GET', 
                handler: handler
            }]);
        },
    },
}

все в порядке, если запрошенный путь правильный. Если запрошенный путь неверен, то приложение переходит в бесконечное число l oop, добавляя /v2 к URI до тех пор, пока оно не выйдет из строя. Например, если запрос для http://server/v2/resrouce1?param1=foo&param2=bar (опечатка resrouce1 вместо resource1), браузер показывает следующее в строке URL-адреса, и сервер выдает сбой с Внутренняя ошибка сервера: Ошибка разбора

http://server/v2/v2/v2/v2/v2/v2… ad infinitum till crash… /v2/resrouce1?param1=foo&param2=bar

Что я делаю не так и как я могу это исправить, чтобы, если кто-то вводит неверный путь, возвращается правильный 404, а не бесконечный l oop перенаправлений.

1 Ответ

0 голосов
/ 03 апреля 2020

разобрался с ошибкой. У меня был старый кусочек ошибочного кода, который пытался услужливо добавить префикс версии api в случае, если пользователь не указал конкретную версию c. Код был глючным, поэтому, когда он не нашел ресурс, его логика c подумала, что версия api отсутствует. Таким образом, он добавил префикс с надеждой перенаправления на ресурс, и это отключило l oop. Я забрал ошибочный код, потому что, подумав второй раз, угадывание того, что пользователь пытается запросить, просто не подходит для API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...