Hapi 子插件不应用父路由前缀
Posted
技术标签:
【中文标题】Hapi 子插件不应用父路由前缀【英文标题】:Hapi child plugin does not apply the parents route prefix 【发布时间】:2019-11-18 21:11:35 【问题描述】:问题: Hapi 不会将插件路由前缀传递给其注册的子插件。
我做了什么: 我有一些插件,我在某种主插件中使用路由前缀注册,如下所示:
const plugin: Hapi.Plugin<any> =
name: 'public-api',
version: '1',
register: async (server: Hapi.Server, options: any) =>
await server.register([
plugin: myPlugin,
routes:
prefix: '/records'
]);
现在所有在“myPlugin”中注册的路由都得到前缀“records”。到目前为止很容易。 假设我在“public-api”插件中注册了更多插件。
现在在我的主服务器对象中,我像这样注册“public-api”插件本身(除了一些其他第三方插件):
await server.register([
...thirdPartyStuff,
plugin: publicApi,
routes:
prefix: '/api'
,
]);
我的期望: 现在可以通过以下路径访问“记录”实体:/api/records 正如 Hapi api 文档所指定的,注册的插件路由前缀将在其注册的子插件中传递或添加前缀。 参考:Hapi register plugins
现实: 服务器完全忽略 'publicApi' 插件的前缀,并在 /records
下提供 'myPlugin'寻求帮助: 所以 mybe 我只是错过了一些东西,或者我愚蠢地正确阅读了文档。 无论哪种方式,也许有人可以启发我,甚至给出解决方案 我认为应该正常工作:D
因此,请提前阅读我的故事和您以任何方式提供的帮助! 干杯!
【问题讨论】:
有人吗?有人吗? :D 我觉得这个功能不常用。但也许有人觉得自己是一个好撒玛利亚人,可以看看这个。再次感谢 【参考方案1】:我已经阅读了docs from hapi,并根据您的信息和您提到的期望行为创建了一个工作示例。
要运行它,只需在你的 typescript 配置的项目目录中安装 ts-node 和 hapi。
import Server, Plugin, Request from 'hapi';
const recordPlugin: Plugin<any> =
name: 'my-plugin',
version: '1',
register: async (server: Server, options: any) =>
server.route(
method: 'GET',
path: '/records',
handler: async function(request: Request, h: any)
return 'something';
);
;
const init = async () =>
const server = new Server(
port: 3000,
host: 'localhost'
);
await server.register(
plugin: recordPlugin,
routes:
prefix: '/api'
);
await server.start();
console.log('Server running on %s', server.info.uri);
;
process.on('unhandledRejection', (err) =>
console.log(err);
process.exit(1);
);
init();
虽然从我的角度来看,您的问题是如何为服务器导入和声明插件。
干杯!
【讨论】:
嘿 Max,谢谢你看一下这个。您提出解决方案的方式不是我的想法。当我尝试为插件本身提供一个前缀,然后由父前缀扩展时,您将路径直接设置为 /records。我的插件有几个注册路由,我都想通过前缀 /records 访问它们。所以很遗憾,这并不能解决我遇到的问题。干杯!以上是关于Hapi 子插件不应用父路由前缀的主要内容,如果未能解决你的问题,请参考以下文章