在Hapi(v17,如果有区别的话)中,从另一个调用插件中的函数的正确方法是什么?
假设我已开始围绕Nodemailer编写包装器插件:
ascending_order=arrange[order(arrange)]
Rank_values=rank(ascending_order)
在Hapi中其他地方公开插件功能的正确方法是什么(即,向Hapi实例本身,或者更重要的是,向Hapi加载的其他插件公开)。
我发现Hapi文档很少,尤其是在插件方面。
例如,如果我的Nodemailer包装器具有'use strict';
const Nodemailer = require('nodemailer');
exports.plugin = {
name: 'mailerWrapperPlugin',
version: '0.0.1',
register: async function (server, options) {
}
};
函数,我该如何在我编写的另一个插件中使用它?
P.S。我有点像Node.JS / Hapi新手,所以请温柔对待我!我正在对此进行测试,因为我正在考虑从PHP迁移到Hapi,以用于将来的后端应用程序。
答案 0 :(得分:1)
您可以使用server.methods对象。医生说:
服务器方法是向服务器注册并使用的函数 在整个应用程序中作为通用实用程序。他们的优势在于 配置它们以使用内置缓存和共享的能力 跨多个请求处理程序,而无需创建通用的 模块。
现在这是您的第一个插件:
const Nodemailer = require('nodemailer');
exports.plugin = {
name: 'mailerWrapperPlugin',
version: '0.0.1',
register: async function (server, options) {
server.method('sendMail', (subject, to, body) => {
// compose and send mail here
});
}
};
这是您的第二个,并确保在第一个之后加载。
exports.plugin = {
name: 'anotherPlugin',
version: '0.0.1',
register: async function (server, options) {
server.methods.sendMail("Hello", "test@test.com", "Sup?");
}
};
就是这样。
您还可以使用server.decorate对象。它的文档说:
使用自定义方法扩展各种框架接口,其中:
server.decorate可以将方法添加到其他一些对象中,例如路由,请求,服务器和响应对象。
如果我们返回您的插件:
exports.plugin = {
name: 'mailerWrapperPlugin',
version: '0.0.1',
register: async function (server, options) {
server.decorate('server', 'sendMail', (subject, to, body) => {
});
}
};
和您的第二个插件,在第一个插件之后加载!
exports.plugin = {
name: 'anotherPlugin',
version: '0.0.1',
register: async function (server, options) {
server.sendMail("Hello", "test@test.com", "Sup?");
}
};
它们之间的区别是server.methods
对象向server.methods
对象添加了自定义字段,但是使用server.decorate可以直接扩展服务器或请求对象。使用对您更清楚的那个,我通常更喜欢server.decorate
。