【问题标题】:wrong URL triggers an infinite redirect loop in Hapijs错误的 URL 在 Hapijs 中触发无限重定向循环
【发布时间】:2020-04-03 05:19:36
【问题描述】:

我使用 Hapijs 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
            }]);
        },
    },
}

只要请求的路径正确,一切都很好。如果请求的路径不正确,则应用程序进入无限循环,将/v2 附加到 URI 直到崩溃。例如,如果请求是针对http://server/v2/resrouce1?param1=foo&param2=bar(拼写错误resrouce1 而不是resource1),浏览器会在URL 栏中显示以下内容,并且服务器会崩溃并显示Internal Server Error: Parse Error

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

我做错了什么以及如何解决这个问题,所以如果有人输入了错误的路径,则会返回正确的 404,而不是无限循环的重定向。

【问题讨论】:

  • 你在路由处理程序中做了什么特别的事情吗?
  • 当然,我在路由处理程序中做了很多事情,但我假设您想知道我是否对路由处理程序中的path 做任何事情。不,据我所知,代码永远不会到达处理程序。我的猜测是路由器(无论是在hapijs 中的哪个位置)在(错误的)资源前面加上/v2,尝试查找资源,但没有找到,再次在/v2 前面加上前缀,然后进程继续

标签: hapijs


【解决方案1】:

发现了错误。我有一段旧的错误代码试图有帮助添加 api 版本前缀,以防用户没有提供特定版本。代码有问题,所以当它没有找到资源时,它的逻辑认为缺少 api 版本。因此,它添加了带有重定向到资源的希望的前缀,从而引发了循环。我删除了错误的代码,因为再想一想,事后猜测用户尝试请求的内容对于 API 来说并不是一个好的模式。

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 2015-01-26
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多