hyper-express + prisma nodejs编程
(一)、生成基础镜像
1、dockerfile文件
# 使用 Node.js v22的镜像作为基础latest FROM node:22 # 创建工作目录 WORKDIR /code # 复制package.json和package-lock.json到工作目录 COPY ./code/package*.json . # 安装项目依赖 # RUN npm install # 如果你打算在生产环境中运行,请取消下面这句的注释 RUN npm ci --only=production # 复制应用的源代码到容器 COPY . /code COPY . . #生成Prisma 客户端 # RUN npx prisma generate # 开放应用所需要的端口 EXPOSE 9003 # 启动应用 CMD ["sh"] # 生成镜像 # docker build -f hyperJS_dockerfile.sh -t hyper.node22 .
2、运行容器
docker run -itd -e TZ="Asia/Shanghai" --restart=always \ --log-opt max-size=1m --log-opt max-file=3 \ --network host \ --name web32 \ -uroot \ -p 9003:9003 \ -v /opt/web32/code:/code \ -v /opt/web32/logs:/code/logs \ hyper.node22
(二)运行容器并在容器中操作
3、进入容器
docker exec -it web32 /bin/bash
4、在容器内运行如下命令升级npm和安装相应的库
先查看是否使用国内镜像源: npm config get registry 没有先更换淘宝源: npm config set registry https://registry.npmmirror.com
在目录 /code 下运行如下命令 查看npm版本: npm -v 查看node版本: node -v 升级npm: npx npm-check-updates -u 安装依赖库: npm install 启动服务器: node main.js
5、这个命令将连接到你的数据库,然后检查数据库架构来更新你的Prisma模型,会自动更新文件:prisma/schema.prisma
npx prisma introspect
6、生成Prisma Client,该命令会根据你的schema.prisma文件生成 Prisma 客户端。通常在修改了schema文件后运行此命令
npx prisma generate
(三)、用上述运行的容器(cdfe8da265d3)生成新镜像 hyper.js
docker commit cdfe8da265d3 hyper.js
(四)、使用新的镜像 hyper.js 进行stack操作
7、stack部署命令
# 初始化你的Docker Swarm集群
# docker swarm init
# 初始化你的Docker Swarm集群
# docker swarm leave
# 查看: docker stack ls
# 部署命令:在docker-compose.yml文件的目录下运行以下命令来部署stack # docker stack deploy -c docker-compose.yml stackJS # 删除命令: # docker stack rm stackJS
8、stack部署docker-compose.yml文件(已成功)
version: '3' services: app: image: hyper.js environment: - TZ=Asia/Shanghai logging: driver: json-file options: max-size: 1m max-file: "3" volumes: - /opt/web32/code:/code - /opt/web32/logs:/code/logs user: root deploy: # 配置服务的部署和运行选项 replicas: 3 # 在集群中为此服务创建3个副本 resources: limits: cpus: "1" # 限制每个副本最多使用的CPU占用率为 1 memory: 300M # 限制每个副本使用的最大内存为 300M restart_policy: condition: any # 设置重启策略,任何非正常退出情况下都会自动重新启动容器 command: node main.js networks: - host networks: host: external: true
(五)、直接生成 hyper.js 的dockerfile,npm install 成功执行后,没生成相应的文件目录----需要再完善
# 使用 Node.js v22的镜像作为基础latest FROM node:22 # 创建工作目录 WORKDIR /code # 复制package.json和package-lock.json到工作目录 COPY ./code/package*.json . # 设置NODE_PATH环境变量指定全局模块安装路径为/code/node_modules ENV NODE_PATH=/code/node_modules # 安装国内源 RUN npm config set registry https://registry.npmmirror.com # 更新所有依赖到最新版本(自动确认)------------ 注释:能安装成功,但实际文件没有 -------------- RUN yes | npx npm-check-updates -u RUN npm install -save # 如果你打算在生产环境中运行,请取消下面这句的注释 RUN npm ci --only=production # 复制应用的源代码到容器 COPY . /code COPY . . # 开放应用所需要的端口 EXPOSE 9003 # 启动应用 CMD ["sh"] # 生成镜像 # docker build -f hyperJS_dockerfile.sh -t hyper.js .
一、修改docker镜像源
配置 Docker Daemon 编辑 Docker 配置文件 Docker 的默认配置文件通常位于 /etc/docker/daemon.json。如果文件不存在,可以手动创建。我们需要在该文件中添加镜像加速器的配置。 1、打开并编辑 daemon.json 文件: sudo vim /etc/docker/daemon.json 添加镜像加速地址 2、可以在配置文件中添加以下内容: { "registry-mirrors": ["https://hub.skillixx.com/"] } 3、重新启动 Docker 服务 修改配置文件后,需要重新启动 Docker 服务以使更改生效: sudo systemctl restart docker 4、验证配置 重新启动 Docker 服务后,我们可以使用以下命令来验证新的镜像仓库是否配置成功: docker info
一、创建新项目
1、创建空项目
A、webStorm里面直接创建空项目
B、使用命令:
mkdir hyper0919
cd hyper0919
npm init -y
2、安装hyper-express
npm i hyper-express
3、安装prisma
npm install prisma --save-dev
4、生成prisma配置文件,执行下面命令后会新建目录和文件:prisma/schema.prisma,可以拷贝现成的配置文件进行覆盖。
npx prisma init
5、这个命令将连接到你的数据库,然后检查数据库架构来更新你的Prisma模型,会自动更新文件:prisma/schema.prisma
npx prisma introspect
6、生成Prisma Client,该命令会根据你的schema.prisma文件生成 Prisma 客户端。通常在修改了schema文件后运行此命令
npx prisma generate
7、其他npx prisma命令
Prisma是一个优秀的数据库工具集,它提供一组功能丰富的命令行工具来帮助你管理和操作你的数据库。这些工具可以通过npx进行调用,不需要在项目中安装Prisma。以下是npx prisma的一些常用命令: npx prisma init: 初始化一个新的 Prisma 项目,会生成一个默认的数据库模型文件schema.prisma。 npx prisma migrate dev --name init: 创建并运行数据库迁移。--name init参数指定了一个名称来描述此次迁移。 npx prisma studio: 启动 Prisma Studio,这是一个图形化的数据管理工具,可以使用它直接查看和编辑数据库记录。 npx prisma generate: 该命令会根据你的schema.prisma文件生成 Prisma 客户端。通常在修改了schema文件后运行此命令。 npx prisma db push --preview-feature: 将你的Prisma模型推送到数据库。这将更新数据库架构以匹配你的Prisma模型,不会创建迁移。 npx prisma introspect: 这个命令将连接到你的数据库,然后检查数据库架构来更新你的Prisma模型。 npx prisma format: 美化schema.prisma文件的格式。 npx prisma validate: 验证 schema.prisma 文件。 npx prisma migrate resolve --applied 20201231000000_my_migration: 用于手动修复迁移历史,在你数据库的_migrations表和你本地migrations文件夹之间有不一致时使用。 注意: Prisma目前处于开发中,一些命令可能需要添加--preview-feature参数才能使用。 每次对数据库模型做出更改后,需运行npx prisma generate来重新生成Prisma客户端。
二、docker部署项目
1、编辑dockerfile
# 使用 Node.js v14的镜像作为基础 FROM node:16 FROM node:14 # 创建工作目录 WORKDIR /app # 复制package.json和package-lock.json到工作目录 COPY package*.json ./ # 安装项目依赖 RUN npm install # 如果你打算在生产环境中运行,请取消下面这句的注释 # RUN npm ci --only=production # 复制应用的源代码到容器 COPY . /app COPY . . #生成Prisma 客户端 RUN npx prisma generate # 开放应用所需要的端口 EXPOSE 3000 # 启动应用 CMD [ "node", "main.js" ] # 生成镜像 # docker build -t hyperJS .
2、终端中运行命令生成镜像
# docker build -t hyperJS .
3、编辑docker-compose.yml文件
version: '3' # 指定 Docker Compose 文件的版本,这里使用的是版本 3 services: # 定义需要的服务 app: # 定义名为 "app" 的服务 image: hyperJS # 指定运行该服务所需的 Docker 镜像 ports: - "3000:9003" # 端口映射,将容器的3000端口映射到主机的9003端口 deploy: # 配置服务的部署和运行选项 replicas: 3 # 在集群中为此服务创建3个副本 resources: limits: cpus: "1" # 限制每个副本最多使用的CPU占用率为 1 memory: 300M # 限制每个副本使用的最大内存为 300M restart_policy: condition: on-failure # 设置重启策略,如果应用程序因错误而退出(非0状态),Docker会自动重新启动容器 # 初始化你的Docker Swarm集群 # docker swarm init # 在docker-compose.yml文件的目录下运行以下命令来部署stack # docker stack deploy -c docker-compose.yml stackJS # 如果你想在 Docker Swarm 模式下使用 docker-compose.yml 文件,这个文件需要通过 docker stack deploy 命令而不是 docker swarm init 进行部署。 # 初始化 Docker Swarm:docker swarm init # 部署服务到 Swarm:docker stack deploy -c /path/to/docker-compose.yml your_stack_name
4、初始化 Docker Swarm
docker swarm init
5、部署服务到 Swarm
docker stack deploy -c docker-compose.yml stackJS
三、自动重载
Nodemon:稳定可靠的老牌劲旅
Nodemon 是一款久负盛名的 Node.js 开发工具,以其稳定性和可靠性而闻名。它可以自动监视代码更改并重新启动服务器,省去了手动重启的麻烦。Nodemon 的主要优点包括:
自动重启服务器: 每次检测到代码更改,Nodemon 都会自动重启服务器。这大大提高了开发效率,让你能快速查看代码更新后的效果。
配置简单: Nodemon 的安装和配置非常简单,只需一行命令即可。
跨平台支持: Nodemon 可以在 Windows、Mac 和 Linux 系统上运行,为开发人员提供了跨平台的支持。
// 安装 Nodemon npm install -g nodemon // 在 package.json 中添加以下脚本 "scripts": { "start": "nodemon index.js" } // 运行 start 脚本来启动 Nodemon npm run start
Turbowatch:后来居上,速度惊人
Turbowatch 是一个较新的 Node.js 开发工具,凭借其惊人的速度和强大的功能迅速赢得众多开发人员的青睐。与 Nodemon 相比,Turbowatch 具有以下优势:
速度更快: Turbowatch 的速度远超 Nodemon,让你能更快地看到代码更改后的效果。
更强大的调试功能: Turbowatch 提供了更丰富的调试功能,帮助你更轻松地定位和修复代码错误。
支持多种语言: Turbowatch 不仅支持 Node.js,还支持 JavaScript、TypeScript 和 Python 等多种语言。
// 安装 Turbowatch npm install -g turbowatch // 在 package.json 中添加以下脚本 "scripts": { "start": "turbowatch index.js" } // 运行 start 脚本来启动 Turbowatch npm run start
四、get方法的2种方式:浏览器访问和参数获取方式不同
//TODO 浏览器访问方式:http://localhost/test?mobile=13541181803,参数取得方式:req.query.mobile test.get('/test', async (req, res) => { // 示例用法 const locks = [ { company_id: 1, lock_id: 'L001', lo: 'Location A', tt: 'L001', m: 'Location A' }, { company_id: 2, lock_id: 'L002', lo: 'Location B', tt: 'L002', m: 'Location B' }, ]; const { searchParams } = new URL(req.url, `http://${req.headers.host}`); const mobile = searchParams.get('mobile'); console.log('req.params.mobile', mobile); res.send(json(locks)); }) //TODO 浏览器访问方式:http://localhost/user/13541181803,参数取得方式:req.params.mobile test.get('/user/:mobile', async (req, res) => { const fil = {mobile: req.params.mobile} const fi = {"mobile": true,"role_id": true,"role_name": true,"lastlock_json": true} const users = await prisma.user.findFirst({ where: fil, select: fi }); console.log(typeof(users)); console.log(users); res.send(json(users)); })