Express
EmbraceSQL generates an Express Application
object suitable for mounting
at any location with use
into an existing express setup, or run directly
with listen
.
This server provides full access to AutoCRUD and can be extended with your own SQL.
Requirements
You are going to need:
- NodeJs >= 18
- PostgreSQL >= 14
These examples assume you are running locally with your shell able to connect to your PostgreSQL with:
psql
Create a new database dvdrental
on your local PostgeSQL server.
curl "https://embracesql.github.io/dvdrental.sql" | psql
Steps
Here is a step by step guide to create an Express
server and a fetch
client.
Generate an Express Server
Go into a nice blank directory.
npm install @embracesql/express
npm pkg set type=module
mkdir -p ./src
npx embracesqlcli generate express --database postgres://postgres:postgres@localhost/dvdrental > ./src/dvdrental.ts
Notice that this creates a module
type for you package.json
. This matches
the tsconfig.json
defaults provided.
Code up an Express Server
We provide handy tsconfig settings that work great with tsx
and typescript
5+.
Create two files as shown.
{
"extends": "@embracesql/shared/tsconfig/tsconfig.json"
}
import { EmbraceSQLExpressApp } from "./dvdrental";
// this is an express application
const app = await EmbraceSQLExpressApp(
"postgres://postgres:postgres@localhost/dvdrental",
);
app.listen(4444);
Test your Express
Start that server:
npx tsx ./src/express.ts
And curl for some data:
curl -X POST http://localhost:4000 \
-H 'Content-Type: application/json' \
-d '{"operation":"Public.Tables.Actor.ByActorId.read","parameters":{"actorId": 1}}'
Generate a Client
It's fun to curl
and all, but TypeScript is about types and autocompletion.
Generate a fully typed fetch
wrapping client.
npm install @embracesql/client
npx embracesqlcli generate client --database postgres://postgres:postgres@localhost/dvdrental > ./src/dvdrental-browser.ts
Test your Client
Create one file as shown. For fun, try typing it to get a sense of the autocomplete.
import { EmbraceSQLClient } from "./dvdrental-browser";
const client = new EmbraceSQLClient({ url: "http://localhost:4444" });
const actor = await client.Public.Tables.Actor.ActorPkey.read({ actorId: 1 });
console.log(actor);
Now run it!
npx tsx ./src/client.ts