如何从另一个调用哈皮插件功能

问题描述 投票:0回答:1

在哈皮(V17,如果这有什么差别),什么叫从其他插件功能的正确方法是什么?

比方说,我已经开始写周围Nodemailer的包装插件:

'use strict';

const Nodemailer = require('nodemailer');

exports.plugin = {
    name: 'mailerWrapperPlugin',
    version: '0.0.1',
    register: async function (server, options) {
    }
}; 

什么是暴露在其他地方哈啤插件功能的正确方法(对哈啤实例本身即,但也许更重要的是,通过哈啤加载其他插件)。

我发现了哈皮文件有点稀疏,尤其是与插件。

因此,举例来说,如果我的Nodemailer包装有sendMail()功能,我将如何做,在其它插件可我写的吗?

附:我有点使Node.js /哈皮的新手,那么温柔地对待我!因为我想从PHP迁移到高致病性禽流感为未来的后端应用程序的我测试了这一点。

node.js hapijs
1个回答
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", "[email protected]", "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", "[email protected]", "Sup?");
    }
};

它们之间的区别,server.methods对象添加自定义字段server.methods对象,但与server.decorate你可以直接扩展服务器或请求对象。使用哪一个更清晰的给你,我喜欢server.decorate一般。

© www.soinside.com 2019 - 2024. All rights reserved.