Team accounts with unlimited members now available to everyone! Invite your teammates and ship faster together, even on the Free Plan.
/Frameworks/Express

Connect an Express application to Neon

Set up a Neon project in seconds and connect from an Express application

Pre-built prompt for connecting ExpressJS applications to Neon Postgres

This guide describes how to create a Neon project and connect to it from an Express application.

Choose a driver

  • @neondatabase/serverless connects over HTTP or WebSockets instead of TCP. Use it for serverless and edge platforms without built-in connection pooling (Vercel, Netlify Functions, Deno Deploy, Cloudflare Workers without Hyperdrive).
  • postgres (postgres.js) is a fast, full-featured client for both serverless and traditional Node.js server environments.
  • pg (node-postgres) is the classic, widely-used driver for traditional, long-running Node.js servers. Also the standard choice for Vercel Fluid compute and Cloudflare with Hyperdrive.

For a detailed comparison including all platforms, see Choosing your connection method.

  1. Create a Neon project

    If you do not have one already, create a Neon project.

    1. Navigate to the Projects page in the Neon Console.
    2. Click New Project.
    3. Specify your project settings and click Create Project.
  2. Create an Express project and add dependencies

    1. Create an Express project and change to the newly created directory.

      mkdir neon-express-example
      cd neon-express-example
      npm init -y
      npm install express
    2. Add project dependencies using one of the following commands:

      npm install @neondatabase/serverless dotenv
  3. Store your Neon credentials

    Add a .env file to your project directory and add your Neon connection details to it. Find your database connection details by clicking the Connect button on your Project Dashboard to open the Connect to your database modal. Select Node.js from the Connection string dropdown. For more information, see Connect from any application.

    DATABASE_URL="postgresql://<user>:<password>@<endpoint_hostname>.neon.tech:<port>/<dbname>?sslmode=require&channel_binding=require"

    important

    Never hardcode credentials in source code files. Always use environment variables via process.env. For more information, see Security overview.

  4. Configure the Postgres client

    Add an index.js file to your project directory and add the following code snippet to connect to your Neon database:

    require('dotenv').config();
    
    const express = require('express');
    const { neon } = require('@neondatabase/serverless');
    
    const app = express();
    const PORT = process.env.PORT || 4242;
    
    const sql = neon(process.env.DATABASE_URL);
    
    app.get('/', async (req, res) => {
      try {
        const [result] = await sql`SELECT version()`;
        const version = result?.version || 'No version found';
        res.json({ version });
      } catch (error) {
        console.error('Database query failed:', error);
        res.status(500).json({ error: 'Failed to connect to the database.' });
      }
    });
    
    app.listen(PORT, () => {
      console.log(`Listening to http://localhost:${PORT}`);
    });
  5. Run index.js

    Run node index.js to view the result on localhost:4242 as follows:

    { version: 'PostgreSQL 16.0 on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit' }
Notes for AI-assisted setup
  • Do not hardcode credentials or connection strings in any .js source file. Always use environment variables via process.env and dotenv.
  • Wrap all database queries in a try...catch block. Return a 500 status with an error message on failure.
  • When using pg (node-postgres), declare let client before the try block and call client?.release() in the finally block. This safely handles cases where pool.connect() itself fails.
  • Initialize the connection pool or client outside the route handler, not inside it. Creating a new pool on every request wastes resources.
  • Choose the right driver for your platform. @neondatabase/serverless is for serverless/edge platforms without TCP support. For long-running Express servers, use pg or postgres. See Choosing your connection method.

Need help?

Join our Discord Server to ask questions or see what others are doing with Neon. For paid plan support options, see Support.

Was this page helpful?
Edit on GitHub