cube.js prepareCompiler api 试用

前边有介绍过prepareCompiler API ,以下是一个项目集成使用简单说明

包装prepareCompiler api

实际上可以不用,但是为了方便使用可以包装一下,比如提供给express 或者类似web 框架

  • cmd module
    app.js, 此处的adapter 并不是必须,如果需要进行特定数据库的测试,就需要了
 
const {prepareCompiler} = require("@cubejs-backend/schema-compiler")
module.exports = {
    preCompiler:function(content,options){
       return prepareCompiler({
            localPath: () => __dirname,
            dataSchemaFiles: () => Promise.resolve([
              { fileName: 'main.js', content }
            ])
          }, { adapter: 'postgres', ...options });     
    }
}

使用

  • 可以提供一个简单的cube schme 文件
    比如
    demo-schmea.js
 
cube('visitors', {
    sql: `select * from visitors`,
    measures: {
        visitor_count: {
            type: 'count',
            sql: 'id',
            drillMembers: [source, created_at]
        },
        visitor_revenue: {
            type: 'sum',
            sql: 'amount',
            drillMemberReferences: [source, created_at]
        }
    },
    dimensions: {
        source: {
            type: 'string',
            sql: 'source'
        },
        created_at: {
            type: 'date',  //  此处编译会报错
            sql: 'created_at'
        }
    }
})
  • 测试
    index.js
 
const app = require("./app")
const fs = require("fs")
let myapp = app.preCompiler(fs.readFileSync("./demo-schmea.js").toString("utf-8"))
myapp.compiler.compile().then(data=>{
    console.log(data)
}).catch(err=>{
    console.log("some wrong:",err.messages)
})
  • 运行效果

说明

项目集成prepareCompiler api 可以提升项目的稳定性

参考资料

https://github.com/rongfengliang/cubejs-prepareCompiler-learning

原文地址:https://www.cnblogs.com/rongfengliang/p/14641897.html