Awesome
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.