返回介绍

server.decorate(type, property, method, [options])

发布于 2024-02-12 19:53:56 字数 2574 浏览 0 评论 0 收藏 0

使用自定义方法扩展各种框架接口,其中:

  • type - 被装饰的接口。支持的类型:

    • 'handler' - 添加一个新的处理程序类型,用于 routes handlers
    • 'request' - 向 Request object 添加方法。
    • 'server' - 将方法添加到 Server 对象。
    • 'toolkit' - 将方法添加到 response toolkit .
  • property - 对象修饰键名称或符号。

  • method - 扩展功能或其他值。

  • options - (可选) 支持以下可选设置:

    • apply - 当 type'request' 时,如果 true ,则使用签名 function(request) 来调用 method 函数,其中 request 是当前的请求对象,返回的值被指定为 装饰。
    • extend - 如果是 true ,则覆盖现有的装饰。 method 必须是一个带有签名 function(existing)` 的函数,其中:
      • existing - 是先前设置的装饰方法值。
      • 必须返回新的装饰功能或值。
      • 不能用于扩展处理程序的装饰。

返回值: none.

const Hapi = require('hapi');
const server = Hapi.server({ port: 80 });

const success = function () {

  return this.response({ status: 'ok' });
};

server.decorate('toolkit', 'success', success);

server.route({
  method: 'GET',
  path: '/',
  handler: function (request, h) {

    return h.success();
  }
});

注册处理程序装饰时, method 必须使用签名的函数 function(route, options) 其中:

  • route - route information .
  • options - 处理程序配置中提供的配置对象。
const Hapi = require('hapi');

async function example() {

  const server = Hapi.server({ host: 'localhost', port: 8000 });

  // Defines new handler for routes on this server

  const handler = function (route, options) {

    return function (request, h) {

      return 'new handler: ' + options.msg;
    }
  };

  server.decorate('handler', 'test', handler);

  server.route({
    method: 'GET',
    path: '/',
    handler: { test: { msg: 'test' } }
  });

  await server.start();
}

method 函数可以有一个 defaults 对象或函数属性。 如果属性设置为对象,该对象用作使用此处理程序的路由的默认路由配置。 如果属性设置为函数,该函数使用签名 function(method) 并返回路由默认配置。

const Hapi = require('hapi');
const server = Hapi.server({ host: 'localhost', port: 8000 });

const handler = function (route, options) {

  return function (request, h) {

    return 'new handler: ' + options.msg;
  }
};

// Change the default payload processing for this handler

handler.defaults = {
  payload: {
    output: 'stream',
    parse: false
  }
};

server.decorate('handler', 'test', handler);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文