Node.js 实战四:数据库集成最佳实践

Node.js与JavaScript的MOOC实战练习部署 本文还有配套的精品资源,点击获取 简介:本压缩包聚焦于Node.js的实战练习,特别适合于已完成MiriadaX课程的学习者。Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,允许开发者用JavaScript进行服务器端编程,简化了网络应用的构建。其中可能包括了使用Heroku云平台部署JavaScript和Node.js开发的Web应用程序的... 阅读详情

你写了个登录接口,用上了 JWT;然后,产品来了句:

“用户数据能分页查吗?能关联公司信息吗?我们这边还有多语言字段…”

你发现:SQL 写得越来越长,关联越来越绕,字段越来越多,bug 越来越玄学。

你需要一套“不是 ORM 胶水,而是数据管理体系”。

本篇文章聚焦:

如何在 Node.js 项目中用 Prisma 或 Sequelize 构建 结构清晰、类型安全、关系友好 的数据层。

一、ORM 的核心价值不只是“少写 SQL”

能力

作用

模型定义

用代码结构描述数据库表

类型提示

带有 TS 支持的 IDE 补全

关系管理

轻松实现一对多、多对多关联操作

数据验证

字段规则、枚举、默认值等限制

迁移工具

版本化管理数据库结构变更

推荐 ORM:Prisma(现代化 + TS 支持最佳)

二、选择 Prisma 还是 Sequelize?

特性

Prisma

Sequelize

类型支持

极好(TS 原生)

一般(需额外定义)

查询方式

链式调用 / Builder 风格

模型方法 + SQL 风格

数据模型

schema.prisma 文件集中管理

动态定义模型

文档与生态

官方现代化、清晰

老牌、成熟度高

学习成本

稍高,但一劳永逸

快速上手,复杂场景更重

如果你是 TS 用户,推荐首选 Prisma。

三、用 Prisma 快速集成数据库

安装依赖

npm install prisma @prisma/client
npx prisma init

编写 schema.prisma

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  posts     Post[]
}

model Post {
  id        Int    @id @default(autoincrement())
  title     String
  author    User   @relation(fields: [authorId], references: [id])
  authorId  Int
}

生成 Client & 执行迁移

npx prisma migrate dev --name init
npx prisma generate

在代码中使用

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

const user = await prisma.user.create({
  data: {
    email: 'test@example.com',
    posts: {
      create: { title: 'My first post' },
    },
  },
});

四、Sequelize 使用快速对比

npm install sequelize mysql2
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('db', 'user', 'pass', { dialect: 'mysql' });

const User = sequelize.define('User', {
  email: { type: DataTypes.STRING, unique: true },
  name: DataTypes.STRING,
});

await User.create({ email: 'a@b.com', name: 'Jack' });

Sequelize 比 Prisma 更灵活,但需要自己控制字段/关联/迁移结构,维护成本略高。

五、推荐的数据访问层结构设计

src/
├── db/
│   ├── prisma.ts         # PrismaClient 初始化
│   └── models/           # 各模型模块化(如 user.ts)
├── services/
│   └── userService.ts    # 聚合多个模型的业务逻辑

六、如何组织复杂关系 & 查询?

场景

Prisma 实现

一对多

user.posts.findMany()

多对多

include: { tags: true }

条件查询

where: { AND: [...] }

分页查询

skip, take, orderBy

建议封装分页/筛选器工具、抽象 query builder 层。

七、性能优化建议

  • 使用 select 限定返回字段,避免肥查询

  • 使用 include 明确关联范围

  • 多次查询合并为事务 prisma.$transaction()

  • 数据量大时用 cursor 分页避免 skip offset 性能差

总结:数据层的好坏,决定了你项目的“可持续性”

你要的不只是“能查数据”,而是:

  • 数据结构清晰(schema 管理)

  • 业务逻辑可复用(service 层抽象)

  • 查询性能稳定(精细控制 select/include)

  • 类型安全联动(TS 全流程提示)

Prisma 与 Sequelize 不是竞品,而是适用于不同场景的好工具。

关键是你是否愿意为你的数据层「建立一套规范与体系」。

构建高效员工数据管理系统:Node.js与MongoDB实战 Node.js的出现为JavaScript语言在服务器端的应用铺平了道路,而MongoDB的非关系型数据库特性则为快速开发提供了极大的便利。本章我们将详细介绍如何搭建Node.js运行环境,并对MongoDB有一个基础的认识。MongoDB是一个面向文档的NoSQL数据库,它以BSON格式存储数据,这种格式类似于JSON,支持灵活的数据模型。其主要优势在于高性能、高可用性、以及易于扩展。这些特性使得MongoDB成为处理大规模数据集的首选。 阅读详情

相关推荐

Electron与node-ibm_db模块:实现DB2数据库连接

Electron(前身为Atom Shell)是由GitHub开发,用于构建跨平台的桌面应用程序。它允许开发者使用Web技术(HTML, CSS, JavaScript)构建用户界面,并且运行在Mac, Windows, Linux等操作系统上。Electron将Chromium和Node.js封装在一个应用中,使得开发人员可以利用Web开发的技术栈来构建原生桌面应用。在数据密集型的应用开发中,数据库操作占据着核心地位。

weixin_30674431的博客 968

Nodejs 第四十章(prisma)

Prisma 是一个现代化的数据库工具套件,用于简化和改进应用程序与数据库之间的交互。它提供了一个类型安全的查询构建器和一个强大的 ORM(对象关系映射)层,使开发人员能够以声明性的方式操作数据库。Prisma 支持多种主流数据库,包括 PostgreSQL、MySQL 和 SQLite,它通过生成标准的数据库模型来与这些数据库进行交互。使用 Prisma,开发人员可以定义数据库模型并生成类型安全的查询构建器,这些构建器提供了一套直观的方法来创建、更新、删除和查询数据库中的数据。

qq1195566313的博客 2630

Prisma:用于 Node.js 和 TypeScript 的下一代 ORM-开源

Prisma 使用适用于 PostgreSQL、MySQL 和 SQLite 的开源 ORM,帮助应用程序开发人员更快地构建并减少错误。 Prisma 的核心是架构,这是一种定义应用程序数据模型及其人类可读关系的声明方式。 如果您已经有一个数据库,您就不必从头开始煞费苦心地创建它——prisma introspect 会照顾到这一点。 Prisma Client 是一个查询构建器,它组合了您的思考方式,并从 Prisma 模式中自动生成了为您的应用量身定制的类型。 我们设计的 API 对 SQL 老手和数据库新手来说都是直观的。 VSCode 中的自动完成、linting、格式化等功能可帮助 Prisma 开发人员保持自信而不会分心。 Prisma Client 特别强调广泛的类型安全,以便在 TypeScript 中进行更高效的开发。 Prisma 是一个服务器端库,可帮助您的应用以直观且安全的方式将数据读取和写入数据库。

Nodejs ORM Prisma 介绍

翻译自:www.prisma.io/blog大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号回复1,加入高级Node交流群目录一个对象关系映射的新范例Prisma —— Node.js 和 TypeScript 的完整 ORMPrisma 适合任何技术栈已经为关键型应用程序的投产做好准备我们对开发人员非常关心下一代 Web 框架基于 Prisma ...

程序员成长指北 1828

GOT-js:一个简单的nodejs脚本来测试Prisma Client和mysql DB

简介:用于测试Prisma + mysql的js脚本 这个Node.js示例在一个简单的Node.js脚本中使用来从mysql数据库中写入,更新和读取数据。 Mysql数据库在localhost:3306端口上本地运行。 该示例基于Prisma提供的此构建。 该脚本是一个简单的CLI,可通过Prisma Client在DB上执行一些基本操作。 这些动作由与node命令一起传递的参数指定,以启动脚本。 如何使用 1.在本地创建数据库 在计算机上的mysql服务器上使用重新创建Characters DB。 DB有一个称为“字符”的表。 它将填充来自script.js文件中内置的数组的一些《权力的游戏》角色。 2.下载示例并安装依赖项 克隆此存储库: git clone git@github.com:carmelag/GOT-js.git 安装npm依赖项: cd GOT-js np

topic-prisma-testing:如何使用NodeJS和Typescript进行Prisma单元和功能测试的示例

主题棱镜测试 此存储库包含有关如何使用NodeJS和Typescript进行Prisma单元和功能测试的示例。 博客文章: : 要求 码头工人 Docker撰写 节点12.x 纱线或npm 开始吧 通过运行以下命令安装软件包: $ yarn install 这个怎么运作 我们运行开发应用程序,并在2个不同的容器中进行测试,分别由docker-compose.yml和docker-compose.test.yml docker-compose.yml管理。 为了运行测试,我们构建了测试容器和数据库。 在您的终端中运行此命令: $ yarn docker:test:build # Alternatively, you can run the following command directly on your host terminal: # docker-compose -f do

Node.js 中的ORM 框架:prisma

使用 Prisma 你可以快速把ORM 添加到你的应用中,并对对数据进行建模、运行架构迁移、查询更新数据库。

2568

告别两个电源模块!用UCD3138+四开关Buck-Boost,一个电路搞定电池充放电(附原理图分析)

本文详细介绍了采用UCD3138数字控制器和四开关Buck-Boost拓扑的双向DC/DC变换器设计,实现单一电路完成电池智能充放电管理。该方案显著降低BOM成本和PCB面积,提升系统效率至96.2%,适用于UPS、通信基站和储能系统,具有高效、紧凑和成本优势。

weixin_30256901的博客 397

精读《Prisma 的使用》

ORM(Object relational mappers) 的含义是,将数据模型与 Object 建立强力的映射关系,这样我们对数据的增删改查可以转换为操作 Object(对象)。Pri...

前端精读周刊 3091

ThinkPad T14 Gen 2与T14P系列对比

表格您的需求推荐机型日常办公、出差、文档处理、视频会议✅(够用、轻便、便宜)视频剪辑、3D建模、编程编译、AI训练、高色准设计✅(性能强、屏幕好、扩展佳)想要未来 5 年不换机✅T14p预算低于 5000 元✅T14 Gen 2(或考虑 T14 Gen 3/4)T14p 2025 款 ≠ 小改款,而是架构级升级它从“高性能笔记本”进化为“AI 移动工作站”,核心差异在于NPU + Ultra 平台 + 全面屏显 + 超长续航。如果您从事AI 开发、视频创作、工程仿真、多任务编程。

tecoes的博客 2743

STM32H743内存告急?手把手教你用CubeMX+FMC外扩32MB SDRAM(W9825G6KH-6)

本文详细介绍了如何在STM32H743上使用CubeMX和FMC外扩32MB SDRAM(W9825G6KH-6),解决内存不足问题。从硬件选型、CubeMX配置到初始化代码实现,提供完整的配置教程和性能优化技巧,帮助开发者高效扩展内存,适用于图形界面和复杂算法处理。

weixin_30568591的博客 496

如何在 Node.js 中使用 Prisma 进行数据库操作?

以用户模型为例:@id注解必须包含字段名和生成规则@default(uuid())会自动生成UUID@unique确保邮箱唯一性多对多关系需要指定关联名称UserPostsschema.prisma文件是否修改过是否在正确的目录执行prisma generate是否有拼写错误我之前把User写成User1,导致排查了半小时。创建计算字段:}).role这样就能通过query接口获取角色。通过这篇文章,你应该已经掌握了Prisma在Node.js中的核心用法。

2501_92584918的博客 949

二手分析仪器改造实战:如何用PMT搭建荧光检测电路(附完整电路图)

本文详细介绍了如何利用二手分析仪器中的光电倍增管(PMT)核心部件,进行荧光检测电路的实战改造。内容涵盖从PMT工作原理理解、高压供电电路设计、低噪声前置放大(跨阻放大器)到信号调理的完整流程,并提供了关键电路图与调试排错指南,旨在帮助电子爱好者与工程师低成本构建稳定、高灵敏度的专业检测系统。

weixin_29234239的博客 441

Node.js数据库集成终极指南:MongoDB、MySQL、Redis最佳实践

学习Node.js时,数据库集成是每个开发者必须掌握的核心技能。NodeJS-Learning项目为你提供了全面的数据库集成资源,帮助你快速掌握MongoDB、MySQL和Redis在Node.js中的最佳实践。本文将为你揭示如何高效地将这三种主流数据库集成到Node.js应用中,提升开发效率和系统性能。 ## 📊 为什么数据库集成如此重要? 在现代Web开发中,数据库是应用的基石。Node

gitblog_01162的博客 1049

openbmc 支持mctp over pcie(二)

本文介绍了在OpenBMC系统中实现MCTP over PCIe的社区方案,主要针对AMD CPU和Intel CPU平台。方案基于社区开发的mctpd应用层和内核驱动,通过修改设备树(dts)配置内存区域,并编译Linux内核模块。验证时可通过查看/proc/net/protocols确认MCTP协议支持,使用ip addr命令检查mctppci0网络接口状态。相关代码和文档参考了AspeedTech和CodeConstruct的GitHub仓库。该方案为BMC作为MCTP端点提供了标准化实现方法。

wit_yuan的专栏 378

V-Mamba:2D 选择性扫描状态空间模型图像分类

V-Mamba CIFAR-10 分类链路:32² RGB → Stem Conv (3→64ch, stride2→16²) → VMambaBlock ×4 (SS2D 四方向 → Mamba S6 扫描 → MLP) → GAP → Linear → 10 类。核心贡献:SS2D 四方向扫描将 2D 空间建模转为 4 个 1D 序列, 计算复杂度从 O(N²) 降至 O(N)。建议先从 CIFAR-10 dim=64 depth=4 验证 SSM 收敛性;

FJN110的博客 70

wordnet-db:Node.js 中的 WordNet 数据库解决方案

wordnet-db:Node.js 中的 WordNet 数据库解决方案 项目介绍 wordnet-db 是一个专为 Node.js 设计的开源项目,旨在为开发者提供一种便捷的方式来安装和使用 WordNet 数据库文件。WordNet 是一个广泛使用的英语词典数据库,包含了大量的词汇、同义词集、词性标注等信息。wordnet-db 通过将 WordNet 3.1 数据库的核心文件集成到 Nod...

gitblog_00446的博客 1114

Claude Code Skills 入门:内置技能与自定义技能开发

│ Skill 的特点 │1. 封装性:把复杂操作封装成简单命令2. 可复用:一次定义,随处使用3. 可定制:支持参数传入4. 可发现:通过 /skill-name 方式调用打个比方,如果说 Claude Code 的基础工具是「原材料」,那 Skills 就是「预制菜」——只需要简单加热(调用),就能得到成品(结果)。你可以创建自己的 Skill 来封装常用操作。Skill 支持参数,通过。

gaoxiang_120的专栏 671

Azure Cosmos DB Node.js SDK 使用教程

Azure Cosmos DB Node.js SDK 使用教程 1. 项目介绍 Azure Cosmos DB Node.js SDK 是一个用于与 Azure Cosmos DB 进行交互的客户端库。Azure Cosmos DB 是微软提供的一种全球分布式、多模型数据库服务,支持多种 API,包括 NoSQL、MongoDB、Cassandra、Gremlin 和 Table。Node.js...

gitblog_01010的博客 1179

SAP ABAP 缓冲同步揭秘——从 DDLOG 表到 RSDBBUF3 的完整实践指南

DDLOG 看似一张不起眼的系统表,却承担着 SAP 多实例环境下的数据一致性重任。通过掌握其字段意义、解析方法及周边监控工具,你可以在性能与一致性之间找到最佳平衡;通过精细化的参数管理与主动刷新策略,更能在关键业务场景中确保“数据永远是最新的”。愿本文能成为你日常排障与架构决策的参考手册。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 314

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【优质书籍推荐】Vue.js+Node.js全栈开发实战

本文深入讲解了全栈开发巨作:《Vue.js+Node.js全栈开发实战(第2版)》,希望能对学习Java的同学们有所帮助。 文章目录 1. 前言 2. 书籍推荐 2.1 内容简介 2.2 本书特色 2.3 作者简介 2.4 本书目录 2.5 适合读者 3. 购买链接

weixin_43178406的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Node.js】全面解析 Node.js 安全最佳实践:保护您的应用

Node.js 应用的安全性是每个开发者都必须关注的问题。通过遵循本文列出的最佳实践,包括输入验证、更新依赖、限制请求频率以及使用安全工具,您可以显著降低安全风险。保护您的 Node.js 应用,既是对用户负责,也是对自身项目的长远发展负责。安全无小事,从今天开始优化您的代码吧!参考资料Node.js 官方文档OWASP 安全实践。

佚名程序员 2857

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Node.js和Javascript的异同

JavaScript的组成: ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象) DOM(一些操作页面元素的方法) BOM(一些操作浏览器的方法) Nodejs的组成: ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象) os(操作系统) file(文件系统) net(网络系统) ...

【小石头的茅坑】 71万+

【Node.js】TypeScript 和 Node.js:现代后端开发

这篇文章详细介绍了 TypeScript 如何与 Node.js 结合使用,以及它们如何帮助开发者提高代码质量、增强开发体验,并构建更健壮的应用程序。

aichaoxy的博客 3736

MySQL与Node.js开发的集成

1.背景介绍 MySQL与Node.js开发的集成是一种非常实用的技术方案,它可以帮助我们更高效地开发Web应用程序。在本文中,我们将深入探讨这种集成方案的背景、核心概念、算法原理、最佳实践、实际应用场景、工具和资源推荐以及未来发展趋势与挑战。 1. 背景介绍 MySQL是一种流行的关系型数据库管理系统,它具有高性能、稳定性和可靠性。Node.js则是一种基于Chrome的JavaScrip...

AI天才研究院 1138

Node.js中sqlite3的db.run、db.get和db.all方法深入解析

SQLite是一个轻量级的数据库,它不需要单独的服务器进程或操作系统,数据库就是一个或多个磁盘文件的集合。方法分别用于执行不返回结果的SQL语句、查询并返回第一行数据和查询并返回所有行数据。通过了解这些方法的API原型定义和相应的代码示例,我们可以更加灵活地进行数据库的增删改查操作。在Node.js中,sqlite3是一个广受欢迎的轻量级数据库库,它提供了一个简洁的API来与SQLite数据库进行交互。方法用于执行SQL语句,它不返回查询结果,只返回操作的影响行数。如果查询结果为空,则返回一个空数组。

2968
上一篇: Node.js 实战三:Token 认证、Session 管理与中间件设计实战
下一篇: Node.js 实战五:文件上传、下载、导出功能的实现与边界处理
普通网友
博客等级 码龄2年 351粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值