@fraqjs/plugin-hono
@fraqjs/plugin-hono 提供了基于 Hono 的 HTTP 服务器集成。
安装与配置
将插件添加到 fraq.yml 的 plugins 字段下:
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;否则请求会继续传递给后续的中间件。