# 编写 mm API Event 事件脚本

## 规则（Rules）

- main.js 是事件处理器，位于 `event_api/{类型}/{事件名}/main.js`
- 必须导出 `module.exports` 对象，包含 `_init` 和 `main` 方法
- `main(ctx, db)` 方法接收 HTTP 上下文和数据管理器

## 方法（Methods）

### 步骤1：编写基础事件处理器

```javascript
module.exports = {
    async _init() {
        // 初始化逻辑，如注册API
        var api = $.admin.api('分组名', '分组标题');
        await api.call('update', 'app/');
    },

    async main(ctx, db) {
        // 事件处理逻辑
        // ctx 是 HTTP 上下文
        // db 是数据管理器
        var { query, body } = ctx.request;
        return $.ret.obj({ success: true });
    }
};
```

### 步骤2：编写 API 路由分发事件

最常见的用法——启动一个事件来分发 API 请求：

```javascript
var api = $.admin.api('client', '默认客户端');

module.exports = {
    async _init() {
        await api.call('update', 'app/');
    },

    async main(ctx, db) {
        $.push(db, $.admin.sql('sys').db(), true);
        return await api.run(ctx, db);
    }
};
```

## 技巧（Tips）

- `api.run(ctx, db)` 会自动匹配路径并调用对应的 API 处理器
- `$.push(db, sqlDb, true)` 将数据库连接注入到 db 对象中
- `_init` 方法在系统启动时执行一次，用于注册 API 或初始化资源
