Skip to content

Example use of Neon serverless driver on Vercel Edge Functions with Zapatos

Notifications You must be signed in to change notification settings

neondatabase-labs/neon-vercel-zapatos

Repository files navigation

neon-vercel-zapatos

This repo demonstrates the use of Zapatos with Neon's serverless driver on Vercel Edge Functions.

We implement a simple app that generates a JSON listing of the user's nearest 10 UNESCO World Heritage sites via IP geolocation (data copyright © 1992 – 2022 UNESCO/World Heritage Centre).

How it works

The @neondatabase/serverless driver is compatible with (and built on top of) node-postgres, the pg package. But because Zapatos tries to import the pg package directly, we have a small amount of extra work to do.

First, we include a tiny local-path package, which you'll find in shims/pg. This calls itself pg but simply re-exports the contents of @neondatabase/serverless. That makes Zapatos work in a serverless environment.

Second, we generate and update the Zapatos schema types (inside ./zapatos) at development-time using Node, by running npm run update-zapatos-types. Because Node has no native WebSocket object, this calls a simple custom script, update-zapatos-types.mjs, in which we configure the serverless driver to use the ws package.

Third, it's important to set "strict": true and add "zapatos/**/*" to the "include" directive in tsconfig.json.

Deploy

  • Ensure the psql client is installed.

  • Create a Neon database and make a note of the connection string from the Neon console.

  • Clone this repo, then:

# get dependencies
npm install
npm install -g vercel@latest

# create DATABASE_URL environment variable, remote and local
npx vercel env add DATABASE_URL  # paste in the connection string and select all environments
npx vercel env pull .env.local  # now bring it down into ./.env.local for local use

# create the schema and copy data to DB
(source .env.local \
 && curl -s https://gist.githubusercontent.com/jawj/a8d53ff339707c65128af83b4783f4fe/raw/45dbcc819b00ecb72f80b0cf91e01b3d055662b5/whc-sites-2021.psql \
 | psql $DATABASE_URL)

# update Zapatos types from DB
npm run update-zapatos-types

# test
npx vercel dev

# ... and deploy
npx vercel deploy

Feedback and support

Please visit Neon Community or Support.

Releases

No releases published

Packages

No packages published