Fraqv0.14.0

@fraqjs/plugin-hono

@fraqjs/plugin-hono npm version

@fraqjs/plugin-hono 提供了基于 Hono 的 HTTP 服务器集成。

安装与配置

将插件添加到 fraq.ymlplugins 字段下:

plugins:
  fraqjs/hono:
    # HTTP 服务监听的主机名,默认值为 127.0.0.1
    host: 127.0.0.1
    # HTTP 服务监听的端口,默认值为 4649
    port: 4649
    # 传递给 @hono/node-server 的其他启动选项
    # 除了 fetch、port、hostname 和 websocket 之外的字段都可以在这里配置
    # serveOptions:

如果你是插件开发者,请将本插件添加到项目的 peerDependencies 中,并在自己的插件中声明依赖:

import { HonoService } from '@fraqjs/plugin-hono';

definePlugin({
  name: 'my-plugin',
  inject: {
    hono: HonoService,
  },
  apply(ctx) {
    // 使用 ctx.hono 来访问 HonoService
  },
});

定义 API 路由

ctx.hono.app 暴露了一个 Hono 实例,你可以直接在上面定义路由,例如:

ctx.hono.app.get('/hello', (c) => {
  return c.text('Hello, world!');
});

ctx.hono.app.post('/echo', async (c) => {
  const body = await c.req.text();
  return c.text(`You said: ${body}`);
});

更多说明请参考 Hono 官方文档

WebSocket 支持

HonoService 通过 ws 包提供了 WebSocket 支持。ctx.hono.upgradeWebSocket 是从 @hono/node-server 重新导出的 upgradeWebSocket 辅助函数,可以将其作为中间件用于处理 WebSocket 升级请求:

ctx.hono.app.get(
  '/ws',
  ctx.hono.upgradeWebSocket(() => ({
    onOpen(evt, ws) {
      ws.send('Connected');
    },
    onMessage(evt, ws) {
      ws.send(`Echo: ${evt.data}`);
    },
  })),
);

当请求的 Upgrade 头为 websocket 时,连接将被升级为 WebSocket;否则请求会继续传递给后续的中间件。

On this page