【发布时间】: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¶m2=bar
我做错了什么以及如何解决这个问题,所以如果有人输入了错误的路径,则会返回正确的 404,而不是无限循环的重定向。
【问题讨论】:
-
你在路由处理程序中做了什么特别的事情吗?
-
当然,我在路由处理程序中做了很多事情,但我假设您想知道我是否对路由处理程序中的
path做任何事情。不,据我所知,代码永远不会到达处理程序。我的猜测是路由器(无论是在hapijs中的哪个位置)在(错误的)资源前面加上/v2,尝试查找资源,但没有找到,再次在/v2前面加上前缀,然后进程继续
标签: hapijs