如何从另一个调用Hapi插件函数
How to call Hapi plugin function from another
在 Hapi 中(v17 如果它有任何区别),从另一个插件中调用函数的正确方法是什么?
假设我已经开始围绕 Nodemailer 编写包装插件:
'use strict';
const Nodemailer = require('nodemailer');
exports.plugin = {
name: 'mailerWrapperPlugin',
version: '0.0.1',
register: async function (server, options) {
}
};
在 Hapi 的其他地方公开插件功能的正确方法是什么(即公开给 Hapi 实例本身,但也许更重要的是,公开给 Hapi 加载的其他插件)。
我发现 Hapi 文档有点稀疏,尤其是与插件相关的文档。
因此,例如,如果我的 Nodemailer 包装器有一个 sendMail()
函数,我将如何在我编写的另一个插件中使用它?
P.S。我是一个 Node.JS/Hapi 新手,所以请温柔对待我!我正在对此进行测试,因为我正在考虑从 PHP 迁移到 Hapi 以用于未来的后端应用程序。
您可以使用 server.methods 对象。文档说:
Server methods are functions registered with the server and used
throughout the application as a common utility. Their advantage is in
the ability to configure them to use the built-in cache and share
across multiple request handlers without having to create a common
module.
现在这是您的第一个插件:
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 对象。它的文档说:
Extends various framework interfaces with custom methods where:
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
。
在 Hapi 中(v17 如果它有任何区别),从另一个插件中调用函数的正确方法是什么?
假设我已经开始围绕 Nodemailer 编写包装插件:
'use strict';
const Nodemailer = require('nodemailer');
exports.plugin = {
name: 'mailerWrapperPlugin',
version: '0.0.1',
register: async function (server, options) {
}
};
在 Hapi 的其他地方公开插件功能的正确方法是什么(即公开给 Hapi 实例本身,但也许更重要的是,公开给 Hapi 加载的其他插件)。
我发现 Hapi 文档有点稀疏,尤其是与插件相关的文档。
因此,例如,如果我的 Nodemailer 包装器有一个 sendMail()
函数,我将如何在我编写的另一个插件中使用它?
P.S。我是一个 Node.JS/Hapi 新手,所以请温柔对待我!我正在对此进行测试,因为我正在考虑从 PHP 迁移到 Hapi 以用于未来的后端应用程序。
您可以使用 server.methods 对象。文档说:
Server methods are functions registered with the server and used throughout the application as a common utility. Their advantage is in the ability to configure them to use the built-in cache and share across multiple request handlers without having to create a common module.
现在这是您的第一个插件:
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 对象。它的文档说:
Extends various framework interfaces with custom methods where:
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
。