You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
import{defineHandler}from"nitro/h3";import{useDatabase}from"nitro/database";exportdefaultdefineHandler(async()=>{constdb=useDatabase();// Create users tableawaitdb.sql`DROP TABLE IF EXISTS users`;awaitdb.sql`CREATE TABLE IF NOT EXISTS users ("id" TEXT PRIMARY KEY, "firstName" TEXT, "lastName" TEXT, "email" TEXT)`;// Add a new userconstuserId=String(Math.round(Math.random()*10_000));awaitdb.sql`INSERT INTO users VALUES (${userId}, 'John', 'Doe', '')`;// Query for usersconst{ rows }=awaitdb.sql`SELECT * FROM users WHERE id = ${userId}`;return{
rows,};});
import{defineTask}from"nitro/task";import{useDatabase}from"nitro/database";exportdefaultdefineTask({meta: {description: "Run database migrations",},asyncrun(){constdb=useDatabase();console.log("Running database migrations...");// Create users tableawaitdb.sql`DROP TABLE IF EXISTS users`;awaitdb.sql`CREATE TABLE IF NOT EXISTS users ("id" TEXT PRIMARY KEY, "firstName" TEXT, "lastName" TEXT, "email" TEXT)`;return{result: "Database migrations complete!",};},});
::
Nitro provides a built-in database layer that uses SQL template literals for safe, parameterized queries. This example creates a users table, inserts a record, and queries it back.
Querying the Database
import{defineHandler}from"nitro/h3";import{useDatabase}from"nitro/database";exportdefaultdefineHandler(async()=>{constdb=useDatabase();// Create users tableawaitdb.sql`DROP TABLE IF EXISTS users`;awaitdb.sql`CREATE TABLE IF NOT EXISTS users ("id" TEXT PRIMARY KEY, "firstName" TEXT, "lastName" TEXT, "email" TEXT)`;// Add a new userconstuserId=String(Math.round(Math.random()*10_000));awaitdb.sql`INSERT INTO users VALUES (${userId}, 'John', 'Doe', '')`;// Query for usersconst{ rows }=awaitdb.sql`SELECT * FROM users WHERE id = ${userId}`;return{
rows,};});
Retrieve the database instance using useDatabase(). The database can be queried using db.sql, and variables like ${userId} are automatically escaped to prevent SQL injection.
Running Migrations with Tasks
Nitro tasks let you run operations outside of request handlers. For database migrations, create a task file in tasks/ and run it via the CLI. This keeps schema changes separate from your application code.
import{defineTask}from"nitro/task";import{useDatabase}from"nitro/database";exportdefaultdefineTask({meta: {description: "Run database migrations",},asyncrun(){constdb=useDatabase();console.log("Running database migrations...");// Create users tableawaitdb.sql`DROP TABLE IF EXISTS users`;awaitdb.sql`CREATE TABLE IF NOT EXISTS users ("id" TEXT PRIMARY KEY, "firstName" TEXT, "lastName" TEXT, "email" TEXT)`;return{result: "Database migrations complete!",};},});
0 commit comments