TypeScript 和 PostgreSQL:构建可靠后端的完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么 TypeScript 和 PostgreSQL 是您项目的理想组合

\n\n

您是否想过,为什么开发者越来越倾向于选择 TypeScript 和 PostgreSQL 的组合?这不仅仅是一种时尚潮流——这是一个强大的组合,正在改变现代 Web 开发的游戏规则。想象一下,一把瑞士军刀和一个可靠的保险箱合二为一:TypeScript 为代码带来了严谨性和可预测性,而 PostgreSQL 则提供了数据存储的可靠性和灵活性。

\n\n

在本指南中,我们不会仅仅停留在理论上。我们将深入实际实践:配置连接、编写查询、创建 API,并学习如何避免常见错误。准备好了吗?让我们开始吧!

\n\n

环境配置:如何开始使用 TypeScript 和 PostgreSQL

\n\n

在编写代码之前,让我们先打好基础。安装依赖项就像建造房屋的地基:地基越牢固,项目就能维持得越久。

\n\n

安装必要的包

\n\n

我们需要两个主要工具:pg(PostgreSQL 客户端)和带有类型的 typescript。在终端中执行以下命令:

\n\n
npm init -y\nnpm install pg\nnpm install -D typescript @types/node @types/pg\nnpx tsc --init\n
\n\n

请注意:我们单独安装了 pg 的类型。这是使用 TypeScript 数据库 的必要条件——否则编译器会因缺少类型而报错。

\n\n

项目基本结构

\n\n

创建一个文件 database.ts——这将是我们连接的核心。以下是一个最小但可用的模板:

\n\n
import { Pool } from 'pg';\n\nconst pool = new Pool({\n  user: 'your_username',\n  host: 'localhost',\n  database: 'your_database',\n  password: 'your_password',\n  port: 5432,\n});\n\nexport default pool;\n
\n\n

为什么使用 Pool 而不是普通客户端?Pool 管理连接池,这对生产环境至关重要。想象一下,每个请求就像咖啡馆里的顾客。没有连接池,您需要为每个顾客开一家新咖啡馆。有了连接池,您已经有几张桌子,只需安排客人入座即可。

\n\n

基本操作:在 TypeScript 中使用 PostgreSQL 进行 CRUD

\n\n

现在是最有趣的部分——编写查询。我们将创建一个简单的用户表,并实现所有四种操作:创建、读取、更新、删除。

\n\n

创建表

\n\n

在处理数据之前,需要创建结构。以下是通过 TypeScript 实现的方法:

\n\n
import pool from './database';\n\nasync function createTable() {\n  const query = `\n    CREATE TABLE IF NOT EXISTS users (\n      id SERIAL PRIMARY KEY,\n      name VARCHAR(100) NOT NULL,\n      email VARCHAR(255) UNIQUE NOT NULL,\n      age INTEGER CHECK (age > 0),\n      created_at TIMESTAMP DEFAULT NOW()\n    );\n  `;\n  \n  try {\n    await pool.query(query);\n    console.log('用户表已创建');\n  } catch (error) {\n    console.error('错误:', error);\n  }\n}\n\ncreateTable();\n
\n\n

请注意 SERIAL——这是 PostgreSQL 自动生成的自增字段。而 CHECK 确保年龄为正数。这是 PostgreSQL TypeScript 如何在两个层面上共同保证数据完整性的示例。

\n\n

添加数据(创建)

\n\n

带参数的插入是避免 SQL 注入的安全方式:

\n\n
interface User {\n  name: string;\n  email: string;\n  age: number;\n}\n\nasync function addUser(user: User) {\n  const query = `\n    INSERT INTO users (name, email, age)\n    VALUES ($1, $2, $3)\n    RETURNING *;\n  `;\n  \n  const values = [user.name, user.email, user.age];\n  \n  try {\n    const result = await pool.query(query, values);\n    console.log('已添加用户:', result.rows[0]);\n    return result.rows[0];\n  } catch (error) {\n    console.error('添加时出错:', error);\n    throw error                

博客

书籍推荐