基于 Node.js、Fastify、Prisma、Zod 的服务项目

基于 Node.js、Fastify、Prisma、Zod  的服务项目

基于 Node.js、Fastify、Prisma、Zod 的服务项目

首先,你需要确保已经安装了以下软件:

  • Node.js(建议版本:14+)
  • npm
  • Docker

接下来,打开终端并执行以下命令:

  1. 创建一个新的项目目录并进入:
mkdir my-project
cd my-project
  1. 初始化 npm 项目:
npm init -y
  1. 安装必要的依赖:
npm install prisma zod fastify fastify-cors dotenv --save
npm install typescript ts-node-dev @types/node @types/uuid --save-dev

这里的依赖包括:

  • prisma:Prisma ORM 库
  • zod:用于验证输入输出的库
  • fastify:Web 服务器框架
  • fastify-cors:Fastify 跨域插件
  • dotenv:环境变量加载器

以及一些开发依赖:

  • typescript:TypeScript 编译器
  • ts-node-dev:用于开发环境的 TypeScript 实时编译工具
  • @types/node:Node.js 类型声明文件
  • @types/uuid:UUID 类型声明文件
  1. 创建 .env 文件并添加以下内容:
DATABASE_URL="postgresql://myuser:mypassword@localhost:5432/mydatabase"
PORT=3000

其中,DATABASE_URL 是连接到你的 PostgreSQL 数据库的 URL(注意替换为你的用户名、密码和数据库名),PORT 是服务运行的端口号

  1. 在项目根目录中创建 prisma/schema.prisma 文件并添加以下内容:
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

model User {
  id        String  @id @default(uuid())
  name      String
  email     String  @unique
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

这是 Prisma 数据模型,它描述了我们将存储在数据库中的数据。这里定义了一个名为 User 的数据模型,包含 id、name、email、createdAt 和 updatedAt 字段。

  1. 创建 src/index.ts 文件并添加以下内容:
import fastify from 'fastify';
import fastifyCors from 'fastify-cors';
import { PrismaClient } from '@prisma/client';
import { z } from 'zod';

const prisma = new PrismaClient();

const server = fastify();
server.register(fastifyCors);

const userSchema = z.object({
  name: z.string(),
  email: z.string().email(),
});

server.post<{ Body: { name: string; email: string } }>(
  '/users',
  async (request, reply) => {
    try {
      const newUser = userSchema.parse(request.body);
      const user = await prisma.user.create({
        data: {
          name: newUser.name,
          email: newUser.email,
        },
      });
      reply.send(user);
    } catch (error) {
      console.log(error);
      reply.status(400).send({ message: error.message });
    }
  }
);

server.listen(process.env.PORT, (err, address) => {
  if (err) {
    console.error(err);
    process.exit(1);
  }
  console.log(`Server started on ${address}`);
});

这是我们的服务代码。它使用 fastify 创建了一个 HTTP 服务器,并定义了一个 POST /users 路由,用于创建新用户。此路由接受具有 name 和 email 字段的 JSON 请求体,并将其验证为符合 userSchema 对象(使用 Zod 库)的格式。如果请求有效,则会将新用户添加到数据库中并返回响应。

  1. 添加 TypeScript 配置文件 tsconfig.json
{
  "compilerOptions": {
    "target": "ES2020",
    "module": "CommonJS",
    "esModuleInterop": true,
    "strict": true,
    "outDir": "dist",
    "sourceMap": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

这个配置文件告诉 TypeScript 编译器如何编译我们的代码,并忽略 node_modules 文件夹。

  1. 在 package.json 中添加以下脚本:
{
  "scripts": {
    "dev": "ts-node-dev --no-notify --transpile-only src/index.ts",
    "build": "rm -rf dist && tsc",
    "start": "npm run build && node dist/index.js"
  }
}

这里的脚本包括:

  • dev:使用 ts-node-dev 工具在开发模式下运行服务,可以实现热更新
  • build:使用 TypeScript 编译器编译我们的代码到 dist 目录
  • start:构建和启动服务
  1. 启动服务:
npm run dev

现在你的服务应该已经运行在 http://localhost:3000,可以使用 Postman 或其他 HTTP 客户端测试 API。

posted on   漫思  阅读(40)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2022-01-25 《Node.js 开发者 2021 报告》发布
2022-01-25 可能使用redux的地方
2022-01-25 tab页的数据结构设计
2022-01-25 富文本编辑器的实例
2022-01-25 antdmobile 2.0的bug
2022-01-25 Griffith - 知乎视频播放器
2022-01-25 Draft.js 在知乎的实践

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示