cube.js 代码集成模式
尽管cube.js 推荐基于docker 进行环境的部署,但是基于代码的启动模式也是很有用的
cube.js 提供了多种模式的方法,core以及server
core 模式
core 模式比较原始了,我们可以方便的集成web 框架(express)
- @cubejs-backend/server-core 提供的方法
create(options)
参考
const { CubejsServerCore } = require('@cubejs-backend/server-core');
const express = require('express');
const path = require('path');
const expressApp = express();
const dbType = 'mysql';
const options = {
dbType,
logger: (msg, params) => {
console.log(`${msg}: ${JSON.stringify(params)}`);
},
schemaPath: path.join('assets', 'schema')
};
const core = CubejsServerCore.create(options);
core.initApp(expressApp);
参数说明: 可以参考https://cube.dev/docs/config 比较通用的参数
server 模式
server 模式是一个已经包装好的express 应用,我们可以直接使用,简化运行
- @cubejs-backend/server
参考使用
const CubejsServer = require('@cubejs-backend/server');
const server = new CubejsServer();
server.listen().then(({ version, port }) => {
console.log(`🚀 Cube.js server (${version}) is listening on ${port}`);
});
配置参数说明,包含了core 的以及附加以下的参数
{
webSockets?: boolean;
initApp?(app: express.Application): void | Promise<void>;
}
websocket 配置主要是进行实时数据的处理
initapp 主要是传递一个express 应用,可以方便扩展
比如
initApp.ts
import type { Application, Request, Response } from 'express';
export function initApp(app: Application) {
app.get('/', (req: Request, res: Response) => {
res.sendStatus(404);
});
}
index.ts
import { initApp } from './initApp';
const options = {};
// ...
if (process.env.NODE_ENV === 'production') {
options.initApp = initApp;
}
const server = new CubejsServer(options);
健康检查
cube.js 提供了健康检查我们可以方便的进行服务情况的检测(基于容器环境)
- 参考配置
const CubejsServer = require('@cubejs-backend/server');
const { createTerminus } = require('@godaddy/terminus');
const cubejsServer = new CubejsServer();
cubejsServer.listen().then(({ version, port, server }) => {
console.log(`🚀 Cube.js server (${version}) is listening on ${port}`);
createTerminus(server, {
healthChecks: {
'/ready': () => cubejsServer.testConnections()
},
onSignal: () => cubejsServer.close()
});
});
参考资料
https://cube.dev/docs/@cubejs-backend-server-core
https://cube.dev/docs/@cubejs-backend-server
https://cube.dev/docs/config
https://github.com/godaddy/terminus