Getting Started with Classo
Classo is a multi-database ORM for Node.js that lets you define your data models once and use them across SQLite, PostgreSQL, MySQL, and MongoDB. It handles validation, database operations, relations, migrations, and queries — all from a single class definition.
Installation
npm install @lol44lol/classo
Choose Your Database
Classo supports four databases. Install the driver for the one you want to use:
# SQLite
npm install sqlite3
# PostgreSQL
npm install pg
# MySQL
npm install mysql2
# MongoDB
npm install mongoose
Connect to a Database
SQLite
const { SQLiteDatabase } = require("@lol44lol/classo/databases/sqlite3")
const db = new SQLiteDatabase("my_database.db")
await db.connect()
PostgreSQL
const { PostgresDatabase } = require("@lol44lol/classo/databases/postgresql")
const db = new PostgresDatabase()
await db.connect("localhost", "myuser", "mypassword", "mydatabase")
MySQL
const { MySqlDatabase } = require("@lol44lol/classo/databases/mysql")
const db = new MySqlDatabase()
await db.connect("mydatabase", "myuser", "mypassword", "localhost")
MongoDB
const { MongoDBDatabase } = require("@lol44lol/classo/databases/mongodb")
const db = new MongoDBDatabase()
await db.connect("mongodb://localhost:27017/mydatabase")
Define Your First DataClass
A DataClass defines your model — its fields, types, and validations. It works with any of the databases above.
const { DataClass } = require("@lol44lol/classo/dataclasses/base")
const { createField, types } = require("@lol44lol/classo/databases/sqlite3") // change to your database
const { is_required, minLength } = require("@lol44lol/classo/dataclasses/validators")
class UserDataClass extends DataClass {
username = createField(types.TEXT, false, false, [
is_required("Username is required"),
minLength(4, "Username must be at least 4 characters")
])
password = createField(types.TEXT, false, false, [
is_required("Password is required"),
minLength(8, "Password must be at least 8 characters")
])
getName() {
return "users" // this becomes your table/collection name
}
}
Create the Table
For SQL databases, create the table before saving data:
await db.createTable(UserDataClass)
For multiple tables with relations, use createTables instead:
await db.createTables(UserDataClass, PostDataClass, CommentDataClass)
Classo figures out the correct creation order automatically based on foreign key dependencies.
MongoDB does not require table creation — collections are created automatically.
Validate and Save Data
const factory = DataClassFactory.createFactory(UserDataClass, { DATABASE: "sqlite" })
// create a DataClass instance with user data
const userInstance = factory.createObject({
username: "johndoe",
password: "securepassword123"
})
// run validation
const validationResult = await userInstance.validate()
if (!validationResult.data.okay) {
console.log("Error:", validationResult.data.error)
console.log("Field:", validationResult.field)
} else {
// transform data (runs afterValidation like password hashing)
const dataToSave = await userInstance.transformValidateDataToBeSaved({
username: "johndoe",
password: "securepassword123"
})
// save to database
const newUser = await db.createObject(UserDataClass, dataToSave)
console.log("Created user:", newUser)
}
What's Next
- DataClass & Validation — learn how to define fields and write validators
- Database CRUD — create, read, update, delete operations
- Relations — define one-to-many, one-to-one, and many-to-many relations
- Migration — update your database schema as your DataClass changes
- Query Builder — filter, sort, and preload related data