[ PROMPT_NODE_23592 ]
data-api
[ SKILL_DOCUMENTATION ]
# Neon JS Data API 参考
使用 `@neondatabase/neon-js` 进行 PostgREST 风格数据库查询的完整参考。
## 客户端设置
### Next.js
typescript
// lib/db/client.ts
import { createClient } from "@neondatabase/neon-js";
import type { Database } from "./database.types";
export const dbClient = createClient({
auth: { url: process.env.NEXT_PUBLIC_NEON_AUTH_URL! },
dataApi: { url: process.env.NEON_DATA_API_URL! },
});
### React SPA
typescript
import { createClient } from "@neondatabase/neon-js";
import { BetterAuthReactAdapter } from "@neondatabase/neon-js/auth/react/adapters";
const client = createClient({
auth: {
adapter: BetterAuthReactAdapter(),
url: import.meta.env.VITE_NEON_AUTH_URL,
},
dataApi: { url: import.meta.env.VITE_NEON_DATA_API_URL },
});
### Node.js 后端
typescript
import { createClient } from "@neondatabase/neon-js";
const client = createClient({
auth: { url: process.env.NEON_AUTH_URL! },
dataApi: { url: process.env.NEON_DATA_API_URL! },
});
---
## 查询模式
所有查询方法均遵循 PostgREST 语法 (与 Supabase 相同)。
### Select 查询
**基础查询:**
typescript
const { data, error } = await client.from("items").select();
**选择特定列:**
typescript
const { data } = await client.from("items").select("id, name, status");
**带过滤器的查询:**
typescript
const { data } = await client
.from("items")
.select("id, name, status")
.eq("status", "active")
.order("created_at", { ascending: false })
.limit(10);
**查询单行:**
typescript
const { data, error } = await client
.from("items")
.select("*")
.eq("id", 1)
.single();
### 插入 (Insert)
**插入单行:**
typescript
const { data, error } = await client
.from("items")
.insert({ name: "New Item", status: "pending" })
.select()
.single();
**插入多行:**
typescript
const { data, error } = await client
.from("items")
.insert([
{ name: "Item 1", status: "pending" },
{ name: "Item 2", status: "pending" },
])
.select();
### 更新 (Update)
**带过滤器的更新:**
typescript
await client.from("items").update({ status: "completed" }).eq("id", 1);
**更新并返回数据:**
typescript
const { data, error } = await client
.from("items")
.update({ status: "completed" })
.eq("id", 1)
.select()
.single();
### 删除 (Delete)
**删除单行:**
typescript
awai