跳到主要内容

Web Server

Interaqt 导出了一个 startServer 函数,你可以用它来快速创建 server。它默认使用的是 fastify 作为底层。 使用 npx create-interaqt-app 创建的应用可以在 /server.ts 中找到相关配置。

初始化数据

除了 server.ts,你还可以在 /install.ts 中找到初始化数据库的脚本。 通过 npm run install 可以执行该脚本。 默认情况下它只会创建数据库和表。如果你需要添加初始化数据,可以直接修改脚本。 通过 controller.system.storage.create 函数来插入初始数据。

鉴权

startServer 的第二参数 config 中有个 parseUserId 配置,你在这里可能获取到每个请求的信息(标准的 fastify Request 对象), 你可以在这里实现对每个请求的权限控制。 在 create-interaqt-app 默认生成的代码中,直接读取 x-user-id 作为 userId,是为了让开发者在开发/测试环境下,能快速通过传入的参数来 模拟当前用户的。

我们建议使用完整的注册登录及及安全系统,例如 logto/auth0 等。 请参考 use logto as authentication system

自定义 api

Interaqt 会默认为所有的 Interaction 创建同名的路由,例如 createRequest 会创建 POST /interaction/createRequest 的路由。 如果你有需要手动创建路由,可以通过第三参数传入。 我们可以使用 createDataAPI 直接将函数暴露成 api,其中传入的参数如果实现了 fromValue 和 toValue 方法,会自动进行序列化和反序列化。 一个直接暴露 record 查询接口的例子。其中的 BoolExp 类实现了 fromValue 和 toValue 方法。 在 client 端调用的时候可以通过 BoolExp 来构建参数,在真正调用时在使用它的 toValue 方法来序列化。

const apis = {
getRecords: createDataAPI(
function getRecords(
this: Controller,
context: DataAPIContext,
recordName:string,
match: BoolExp<any>,
attributes = ['*']
) {
return this.system.storage.find(recordName, match, undefined, attributes)
},
{ allowAnonymous: true, params: ['string', BoolExp, 'object'] }
),
}

startServer(controller, {
port: PORT,
parseUserId: async (headers: IncomingHttpHeaders) => {
return headers['x-user-id'] as string
}
}, apis)

在 Custom API 中常常会使用到 Controller.system.storage 来处理数据,具体的 API 参考 reference/storage