prostgles-server
v4.2.627
Published
Isomorphic PostgreSQL client for [node](http://nodejs.org)
Maintainers
Readme
prostgles-server
Isomorphic PostgreSQL client for node
New: JSONB schema runtime validation and TS types
Features
- CRUD operations with end-to-end type safety
- Auto-Generated TypeScript Definition for Database schema
- Subscriptions to data and schema changes
- Fine grained access control
- Optimistic data replication
Installation
$ npm install prostgles-serverQuick start
import prostgles from "prostgles-server";
prostgles({
dbConnection: {
host: "localhost",
port: "5432",
user: process.env.PG_USER,
password: process.env.PG_PASS,
},
tsGeneratedTypesDir: __dirname,
onReady: async ({ dbo }) => {
const posts = await dbo.posts.find(
{ title: { $ilike: "%car%" } },
{
orderBy: { created: -1 },
limit: 10,
},
);
},
});Server-Client usage
server.js
const express = require("express");
const app = express();
const path = require("path");
var http = require("http").createServer(app);
var io = require("socket.io")(http);
http.listen(3000);
let prostgles = require("prostgles-server");
prostgles({
dbConnection: {
host: "localhost",
port: "5432",
user: process.env.PRGL_USER,
password: process.env.PRGL_PWD,
},
io,
publish: "*", // Unrestricted INSERT/SELECT/UPDATE/DELETE access to the tables in the database
onReady: async ({ dbo }) => {},
});react.tsx
const App = () => {
const { isLoading, dbo } = useProstglesClient();
if (isLoading) return null;
return <>Database tables: {Object.keys(dbo)}</>;
};./public/index.html
<!DOCTYPE html>
<html>
<head>
<title>Prostgles</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script
src="https://unpkg.com/socket.io-client@latest/dist/socket.io.min.js"
type="text/javascript"
></script>
<script
src="https://unpkg.com/prostgles-client@latest/dist/index.js"
type="text/javascript"
></script>
</head>
<body>
<script>
prostgles({
socket: io(),
onReady: async ({ dbo, dbsMethods, schemaTables, auth }) => {},
});
</script>
</body>
</html>Application context
Use createProstgles with createContext to initialize typed, instance-scoped dependencies after
the database object is ready. The returned context is available to onReady, server functions, and
table hooks. Registered cleanups run in reverse order before the context is recreated or destroyed.
import { createProstgles } from "prostgles-server";
import type { DBGeneratedSchema } from "./DBGeneratedSchema";
import { ServiceManager } from "./ServiceManager";
const prostgles = createProstgles<DBGeneratedSchema>();
prostgles({
dbConnection: process.env.DATABASE_URL!,
createContext: async ({ dbo, onCleanup }) => {
const serviceManager = await ServiceManager.create(dbo);
onCleanup(() => serviceManager.destroy());
return { serviceManager };
},
onReady: ({ context }) => {
context.serviceManager;
},
});