返回模板

Neon 入门模板

Next.js 入门模板,集成 Neon 无服务器 Postgres 和内置身份认证。

框架Next.js
数据库Neon
应用场景快速开始
Next.js 入门模板,集成 Neon 无服务器 Postgres 和内置身份认证。

Neon 数据库模板

部署到 EdgeOne Pages

一个简单的 Next.js 入门项目,包含 Neon Postgres 数据库和身份验证功能。

特性

  • 邮箱/密码身份验证
  • Neon Postgres 数据库
  • 深色模式支持
  • 页面访问统计
  • 用户统计
  • 数据库连接状态

快速开始

1. 创建 Neon 数据库

  1. 前往 https://console.neon.tech 注册账号
  2. 创建新项目
  3. 复制连接字符串(以 postgresql:// 开头)

2. 配置环境变量

# 复制示例环境文件
cp .env.example .env

# 编辑 .env 文件,添加 Neon 连接字符串:
DATABASE_URL=postgresql://username:password@host.neon.tech/dbname?sslmode=require

3. 安装依赖

pnpm install

4. 初始化数据库

# 创建数据库表
pnpm db:init

这将创建:

  • users 表 - 存储用户账户
  • page_visits 表 - 跟踪页面统计

5. 运行开发服务器

pnpm dev

打开 http://localhost:3000

可用脚本

命令描述
pnpm dev启动开发服务器
pnpm build构建生产版本
pnpm db:init初始化数据库表
pnpm db:generate生成 Drizzle 迁移
pnpm db:push推送 schema 变更到数据库
pnpm db:studio打开 Drizzle Studio(数据库 GUI)

数据库 Schema

模板使用 Drizzle ORM,包含两个表:

users

字段类型描述
idSERIAL主键
emailVARCHAR(255)用户邮箱(唯一)
password_hashTEXTBcrypt 哈希密码
nameVARCHAR(255)可选显示名称
created_atTIMESTAMP账户创建时间
updated_atTIMESTAMP最后更新时间

page_visits

字段类型描述
idSERIAL主键
pageVARCHAR(100)页面标识
countINTEGER访问次数
last_visitTIMESTAMP最后访问时间

部署到 EdgeOne Pages

一键部署

部署到 EdgeOne Pages

点击上方按钮直接将此模板部署到 EdgeOne Pages。

注意:部署后需要在 EdgeOne Pages 控制台配置环境变量。

手动部署

  1. 推送代码到 Git 仓库
  2. 在 EdgeOne Pages 控制台连接仓库
  3. 添加环境变量:
    • DATABASE_URL - Neon 连接字符串
    • SESSION_SECRET - 随机字符串(至少 32 位)
  4. 部署

环境变量

变量描述必填
DATABASE_URLNeon Postgres 连接字符串
SESSION_SECRET会话加密密钥(至少 32 位)
NEXT_PUBLIC_APP_URL应用 URL(默认:http://localhost:3000)

技术栈

项目结构

neon-starter/
├── app/
│   ├── actions/authActions.ts    # 身份验证 Server Actions
│   ├── api/logout/route.ts       # 登出 API 路由
│   ├── components/
│   │   ├── ui/                   # UI 组件(Card、Button、Input 等)
│   │   ├── header.tsx            # 导航头部
│   │   └── theme-provider.tsx    # 深色模式提供者
│   ├── lib/
│   │   ├── auth.ts               # 会话和密码工具
│   │   ├── db.ts                 # 数据库连接
│   │   └── utils.ts              # 辅助函数
│   ├── login/page.tsx            # 登录页面
│   ├── register/page.tsx         # 注册页面
│   ├── globals.css               # 全局样式
│   ├── layout.tsx                # 根布局
│   └── page.tsx                  # 首页
├── db/schema.ts                  # 数据库 schema 定义
├── scripts/init-db.ts            # 数据库初始化脚本
├── .env.example                  # 环境变量模板
├── drizzle.config.ts             # Drizzle ORM 配置
├── edgeone.json                  # EdgeOne Pages 部署配置
└── package.json

故障排除

数据库未连接

  • 检查 .env 文件中的 DATABASE_URL
  • 确保已创建数据库表:pnpm db:init
  • console.neon.tech 验证 Neon 数据库状态

会话错误

  • 确保 SESSION_SECRET 至少 32 位字符
  • 清除浏览器 Cookie 后重试