npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

jbdap-sqlite

v0.1.8

Published

The official JBDAP implementation for nodejs work with sqlite.

Downloads

7

Readme

JBDAP-Node-Sqlite 文档

一、简介

JBDAP-Node-Sqlite 是 JBDAP 在 nodejs 环境下针对 Sqlite 数据库的官方实现,使用它可以快速开发一个基于 Sqlite 的数据库应用(可以是 Native 或者 B/S 或者 C/S 架构),操作数据的后端代码量可以减少 80% 以上。

如果您的项目采用了其它数据库,我们也有相应的实现可供使用:

也欢迎您编写更多其它数据库的 JBDAP 实现贡献给社区。

二、基本用法

注:支持 nodejs 8 及更高版本

1、安装

npm i jbdap-sqlite --save

// 或者

yarn add jbdap-sqlite

注意,因为包内自带了 sqlite3 引擎,所以无需单独安装

2、示例代码

我们假定在项目根目录下有一个叫做 /database/data.sqlite 的数据库,里面有个 [User] 表已经填充了一些数据

// 引用
const JBDAP = require('jbdap-sqlite')

// Sqlite 数据库文件
const path = require('path')
const dbFile = path.join(process.cwd(), 'database', 'data.sqlite')

// 创建连接
const conn = JBDAP.getConn(dbFile)

// 参数配置
let config = {
    language: 'zh-cn',  // 以简体中文作为交流语言
    printSql: true,     // 是否打印 sql 语句(方便调试,生产环境可关闭)
}

// JBDAP指令描述(取出全部用户列表)
let json = {
    commands: [
        {
            name: 'allUsers',
            type: 'list',
            target: 'User',
        }
    ]
}

// 执行查询
JBDAP.manipulate(conn,json,config)
    .then((res)=>{
        console.log(JSON.stringify(res,null,4))
    })
    .catch((err)=>{
        console.log(err)
    })

// 打印出的返回结果如下
{
    "code": 200,
    "message": "ok",
    "data": {
        "allUsers": [
            {
                "id": 1,
                "username": "user1",
                "password": "password1",
                "avatar": null,
                "email": null,
                "gender": "FEMALE",
                "createdAt": "2020-07-08 14:42:44",
                "updatedAt": "2020-07-08 14:42:44"
            },
            ...
        ]
    }
}

很简单吧,我们只需要改变 json 的内容,就可以使用上述代码进行 JBDAP 规范下的任何数据库查询或者操作。

三、更多能力

由于 JBDAP-Node-Sqlite 是对 JBDAP 协议的实现,因此它的能力其实也就是 JBDAP 的能力,在查看实例代码之前,我们先看一下 JBDAP 的能力全景图:

  • 创建数据
    • 单条、多条插入
    • 大数据量自动分批插入
  • 查询数据
    • 多种查询类型
      • entity - 查询单条记录
      • list - 查询多条记录
      • values - 对符合条件的记录进行统计和简单计算
    • query - 查询约束
      • where 条件 - 可以支持单表任意复杂查询,不支持联合查询
      • fields - 指定及重命名字段
      • size/page - 分页支持
      • order - 排序
    • cascaded 级联查询 - 支持多层级联查询
  • 操作已有数据
    • 操作类型
      • update - 部分或全部更新记录
      • increase - 原子更新操作之增量
      • decrease - 原子更新操作之减少
      • delete - 删除记录
    • query - 操作条件约束
      • where 条件 - 可以支持单表任意复杂查询,不支持联合查询
      • limit/offset 支持以 size/page 的形式实现
  • 逻辑能力
    • multiple - 顺序执行多条指令
    • onlyIf - 指令执行的前置条件约束
    • after - 后续指令操作(支持多条)
    • method - 服务端内置方法实现特殊操作或值的输入
    • reference - 指令间的结果集引用
  • 高级能力
    • 事务支持 - 成功或回滚
    • 服务端函数 - 对于复杂逻辑的操作通过单独编写操作函数来实现
    • 日志输出 - 前端可以查看完整处理日志
    • 错误跟踪 - 前端可以查看返回的错误跟踪以方便调试
    • 身份校验
    • 权限控制
    • 敏感数据屏蔽
    • 缓存支持

四、实例代码手册

请参见这里(建议新窗口打开)

五、完整 API 说明

说实话,如果你能看完前面的实例代码手册,那么已经可以满足正常开发需要了。以下 API 可以帮助你更好的理解 JBDAP 实现的逻辑结构,对于想要开发自己 JBDAP 引擎的朋友来说会比较有用。先了解大体结构之后再去看源码效率会更高一些。

let JBDAP = require('jbdap-sqlite')

  • version - String - 当前版本
  • getConn - Function - 生成一个 Sqlite 数据库连接
    • params - 参数
      • dbFile - String - 数据库文件的完整路径,建议通过 path.join() 方式生成
    • return - 返回一个 knex 连接实例
  • knex - Object - 对于 knex 包的引用,方便用户自己创建其它数据库连接
  • manipulate - Function - JBDAP 的核心方法,通过它来执行 JBDAP json 描述中的指令
    • params - 参数
      • conn - Object - knex 数据库连接实例,可以通过 getConn 函数获得
      • json - Object - 将要被执行的 JBDAP 指令描述内容
      • config - Object - 配套参数
        • printSql? - Boolean - 是否在控制台打印出 sql 语句,默认为 true
        • language? - String - 系统交互使用的语言(目前只支持简体中文和英语),默认为 'zh-cn'
        • recognizer? - async Function - 通过 json 中的 Security 信息完成用户身份识别
        • doorman? - async Function - 通过用户身份控制其对数据的访问权限
        • scanner? - async Function - 对即将返回前端的数据进行扫描,防止敏感数据泄露(比如 password/token 等字段)
        • cacher? - async Function - 缓存操作模块,提升系统处理能力
        • dispatcher? - async Function - 服务端函数调度器,如果使用服务端函数功能就必须配置它
    • return - Object - 返回执行结果,成员如下:
      • code - Integer - 状态码
      • message - String - 执行结果或者错误提示信息(如果失败的话)
      • data - Object - 每个 property 对应一条指令的名字
      • logs? - Array - 执行过程日志
      • trace? - String - 错误跟踪信息
  • helper - Object - Sqlite 数据库快捷操作工具
    • createTable - async Function - 根据 schema 创建数据表
      • params - 参数
        • conn - knex 连接实例
        • schema - Object - 数据表结构描述 json 内容,具体结构参见下文
        • lang - String - 默认交互提示信息语言
    • dropTable - async Function - 删除数据表
      • params - 参数
        • conn - knex 连接实例
        • tableName - String - 数据表名
        • lang - String - 默认交互提示信息语言

以上就是全部的 API 了。

Enjoy It :-)