一步步搭建基于 ts + express + prisma + mongodb + zod 后端服务

news2024/9/20 9:02:04

环境: windows11、node 18.16.0 、pnpm

1、在合适位置,代开 vscode , 终端执行 mkdir miaooo-backend && cd miaooo-backend && npm init -y
创建一个名为一个 miaooo-backend 的项目,并且进入项目 执行 npm 默认初始化。
在这里插入图片描述
2、安装基础工具包:
pnpm add express
pnpm add typescript ts-node nodemon @types/node @types/express -D
在这里插入图片描述
3、新建 src 目录。 src目录下新建 app.tsconfigutilsmiddleware
在这里插入图片描述

4、执行 git init , 并创建 .gitignore 文件,
在 https://www.toptal.com/developers/gitignore 中,搜索适用于node的 .gitignore 配置

在这里插入图片描述
创建后复制到 .gitignore 文件中, 并在 .gitignore 开头加入 build。(后面我们将ts编译的文件放到build目录下)
在这里插入图片描述

在终端将代码推送到仓库当中。这里你可以随意选择github、gitee 等,作为仓库托管。
5、在 middleware 下创建 bootstrap.ts 并添加如下代码。用于引导 express 初始化启动。


import { Express } from 'express'

const bootstrap = (app: Express) => {

  app.use('/', (req, res) => {
    res.send('hello express')
  })
  app.listen(3000, () => {
    console.log('Server ready at localhost:3000');
  })
}

export default bootstrap

在 app.ts 文件中, 创建 express 实例,并执行 bootstrap。
在这里插入图片描述

6、在 package.json 中,添加 scripts 命令如下:
"dev": "nodemon src/app.ts"

在终端执行 pnpm run dev, 打开浏览器正常访问
在这里插入图片描述
7、项目根目录下终端执行 tsc --init, 创建 tsconfig.json 文件
找到 outDir, 设置为 './build', 表示 ts 编译后生成并存放 build 目录下。
在这里插入图片描述

再次修改 package.json 中的 scripts 命令如下:


  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "nodemon src/app.ts",
    "build":"tsc",
    "start": "npm run build && node build/app.js"
  },

在这里插入图片描述
终端执行 npm run build 顺利生成 build 目录在这里插入图片描述
8、 添加其他工具包
执行 pnpm add express-rate-limit 使用 express-rate-limit 来实现请求限流
在这里插入图片描述
执行 pnpm add cors 安装 cors, 来实现跨域请求。
安装类型文件包 pnpm add @types/cors -D
在这里插入图片描述
9、安装prisma
pnpm add prisma -D
安装完毕执行 pnpx prisma init, 会在自动创建一个 prisma 目录 和 .env 文件。默认连接 postgresql
在 .env 文件里可以配置数据库的地址
在这里插入图片描述
10、本地启动 mongodb, 并将 .env 中的数据库地址改为本地的 mongodb 地址:
在这里插入图片描述
修改 schema.prisma
更改 db 为 mongodb
简单定义一个 User 模型。
在这里插入图片描述
11、pnpm add @prisma/client 添加 prisma 客户端。
每次 schema.prisma 中新增或者变动 model 时,都需要执行 prisma db push , 来 重新生成 prisma.client

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/639028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringCloud——Seata分布式事务管理框架】

一、分布式事务存在的问题 在分布式系统下,一个业务跨越多个服务或数据源,每个服务都是一个分支事务,要保证所有分支事务最终状态一致,这样的事务就是分布式事务。 分布式事务和传统形式的事务区别有什么?众所周知&a…

【GIS教程】使用高程数据在UE5中创建真实山脉模型

在数字孪生项目中,我们经常需要使用真实的山脉地形作为城市模型展示的基础。然而,UE5的默认地形系统过于复杂,无法像3D模型那样进行实时修改。因此,本教程将指导您如何将高程山脉作为模型导入到UE5引擎中,而不是使用UE…

【微服务】SpringBoot 插件化开发模式详细总结

目录 一、前言 1.1 使用插件的好处 1.1.1 模块解耦 1.1.2 提升扩展性和开放性 1.1.3 方便第三方接入 1.2 插件化常用实现思路 二、Java常用插件实现方案 2.1 serviceloader方式 2.1.1 java spi 2.1.2 java spi 简单案例 2.2 自定义配置约定方式 2.2.1 添加配置文件…

36.SpringBoot实用篇—运维

目录 一、实用篇—运维。 (1)程序打包与运行(Windows版)。 (2)spring-boot-maven-plugin插件作用。 (3)程序打包与运行(Linux版)。 (4&#…

syntax error: unexpected end of file

运行工程报错误:liporepo.sh: line 2: command not found liporepo.sh: line 19: syntax error: unexpected end of file Command PhaseScriptExecution failed with a nonzero exit code 由于.sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。因为在…

【svopro】代码梳理

SVO2系列之深度滤波DepthFiltersvo_noteSVO(SVO: fast semi-direct monocular visual odometry)SVO 半直接视觉里程计【DepthFilter】深度滤波器【svopro】代码梳理 svo processFrame代码梳理 1.0 processFrame主流程1.1 sparseImageAlignment1.1.1 核心…

100天精通Golang(基础入门篇)——第6天: 深入解析Go语言中的运算符

🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《I…

Kafka详解(二)

Kafka命令行操作 [aahadoop102 ~]$ cd /opt/module/kafka/bin/ [aahadoop102 bin]$ ll 可以看到自带了zookeeper主题命令行操作 查看操作主题命令需要的参数 [aahadoop102 kafka]$ bin/kafka-topics.sh重要的参数如下查看当前服务器中的所有topic [aahadoop102 kafka]$ bin…

Socket 编程:基础概念辨析

文章目录 参考Socket APIBSD UNIX 操作系统BSD UNIX 与 Socket API Socket套接字套接字地址套接字 VS 套接字地址套接字的表示方法 TCP 套接字与 UDP 套接字TCP 套接字监听套接字连接套接字 UDP套接字 TCP 服务器端与 TCP 客户端通信的基本流程服务器端客户端 参考 项目描述刘…

大学物理(上)-期末知识点结合习题复习(4)——质点运动学-动能定理 力做功 保守力与非保守力 势能 机械能守恒定律 完全弹性碰撞

目录 1.力做功 恒力作用下的功 变力的功 2.动能定理 3.保守力与非保守力 4.势能 引力的功与弹力的功 引力势能与弹性势能 5.保守力做功与势能的关系 6.机械能守恒定律 7.完全弹性碰撞 题1 题目描述 题解 题2 题目描述 题解 1.力做功 物体在力作用下移动做功…

软件测试商城项目优惠券超发问题该怎么测试?

在拼夕夕面试中,面试官问了一连串经典的问题:“优惠券库存是怎么扣减的?开发为了解决超发优惠券问题而设计的方案,你了解过吗?你又是如何测试的呢?” 当时听到这些问题还挺懵的,没遇到过超发问…

MIsc(5)

ningen 打开后是一张生物图片,利用010打开后文件头没问题的,但是在文件末尾好像是包含了一个txt文件 拿到kali里利用binwalk分离出一个zip文件,但是需要密码打开 既然提示了资环4位数字的密码,那就可以直接爆破 获得flag 小明的保…

KCD 北京站报名开启 | 云原生英雄帖,邀您京城聚首

各位云原生社区侠客, 仲夏十七,风云际会。 江湖号召,原生论道。 2023 年 6 月 17 日,京城将迎来一场关于云原生的武林盛会——Kubernetes Community Days (KCD) 2023 北京站。 经过一轮公开的议题招募,KCD Beijing…

Jetpack Compose —— Image

在 Jetpack Compose 中,Image 是一个重要的组件,用于显示图像和处理图像相关的操作。 一、Image在Compose中的简单使用 二、如何网络调用Image 一、Image在Compose中的简单使用 首先,让我们了解一下 Image 组件的基本用法。要在 Jetpack C…

复习之linux系统中的软件管理

一、linux系统中软件包 1.软件包的类型 "注意在rhel8中只能使用绿色软件,源码编译软件和rpm软件" 类型支持的条件DEBUBlinux DEBlinux(用不了)RPM#redhat centOS fadorabz2|gz|xz#1.需要源码安装需要编译 #2.绿色软件,直接可用 #ntfs-3g_nt…

2023下半年杭州/广州/东莞/深圳软考(中/高级)认证,这里报名

软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成…

如何成为一名全职创作者——程序员篇

哈喽大家好,我是咸鱼 今天跟大家分享一篇文章,这篇文章的作者 Gergely Orosz 是一名程序员,他从 Uber 辞职以后,就当起了全职创作者 他通过写文章、卖课程、做视频等谋生,今天这篇文章是他对这种商业模式的思考&…

内网渗透-windows远程用户管理

文章目录 0x01 获取window权限(管理员)0x02 添加用户,并且到管理员组0x03 开启远程桌面0x04 添加到远程桌面组0x05 进行远程0x06 免责声明 0x01 获取window权限(管理员) 使用cs上线用户 kali:192.168.253.234 window …

DVWA-10.XSS (DOM)

大约 “跨站点脚本 (XSS)”攻击是一种注入问题,其中恶意脚本被注入到原本良性和受信任的网站上。 当攻击者使用 Web 应用程序发送恶意代码(通常以浏览器端脚本的形式)时,就会发生 XSS 攻击, 给…

报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input

问题: 测试接口发送请求时后端报错:org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input: expected close marker for Object (start marker at [Source: (PushbackInputStream); line: 1,…