使用express+nginx+pm2+postman实现推送zip包自动更新前端网页

news2024/12/26 4:48:01

1.nginx配置将80端口代理到项目的3000端口

server {
    listen       80; #监听的端口
    server_name  localhost; #监听的域名
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    location / {
		#root html;
		#index index.html index.html;
        proxy_pass http://127.0.0.1:3000; #转发请求的地址
		proxy_connect_timeout 600;
		proxy_read_timeout 600;
}

Windows下的常用命令

启动服务:start nginx
退出服务:nginx -s quit
强制关闭服务:nginx -s stop
重载服务:nginx -s reload  (重载服务配置文件,类似于重启,服务不会中止)
验证配置文件:nginx -t
使用配置文件:nginx -c "配置文件路径"
使用帮助:nginx -h

2.express启动网页服务,还有一个post上传接口包括文件(file),版本号(version),约定密码(password),其中目录结构中页面在服务端项目根目录下public文件夹下。server.js也在项目的根目录下。前端启动是3000端口。
server.js

const express = require('express');
const multer = require('multer');
const fs = require('fs');
const path = require('path');
const unzipper = require('unzipper');
const { exec } = require('child_process');

const app = express();

const PASSWORD = 'hello word123';
const PUBLIC_FOLDER = path.join(__dirname, 'public');

app.use(express.static(path.join(__dirname, 'public')));

app.get('/', (req, res) => {
  res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

// 配置 multer 中间件
const upload = multer({
  dest: 'temp/', // 设置临时存储目录
});

app.post('/upload', upload.single('file'), (req, res) => {
  const version = req.body.version;
  const password = req.body.password;
  const file = req.file;

  if (password !== PASSWORD) {
    fs.unlinkSync(file.path); // 删除临时上传的文件
    return res.status(401).json({ error: 'Invalid password' });
  }

  const filePath = path.join(PUBLIC_FOLDER, `${version}.zip`);

  fs.renameSync(file.path, filePath); // 将临时文件移动到目标路径

  fs.createReadStream(filePath)
    .pipe(unzipper.Extract({ path: PUBLIC_FOLDER }))
    .on('close', () => {
      fs.unlinkSync(filePath); // 删除上传的压缩文件
      res.json({ message: version + ' File uploaded and extracted successfully' });

      exec('pm2 restart 0', (error, stdout, stderr) => {
        if (error) {
          console.error(`Failed to restart server: ${error.message}`);
        } else {
          console.log(`Server restarted: ${stdout}`);
        }
      });
    });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

项目依赖:

{
  "dependencies": {
    "body-parser": "^1.20.2",
    "express": "^4.18.3",
    "multer": "^1.4.5-lts.1",
    "unzipper": "^0.10.14"
  }
}
  1. 使用pm2启动服务 pm2 start server.js
  2. postman 使用form-data上传前端页面zip包,约定密码 hello word123
    在这里插入图片描述

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

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

相关文章

Android App冷启动耗时优化

Android应用启动过程 Android应用启动过程,主要包含app::onCreate及执行前的Application阶段及Activity::onCreate执行之后的Activity阶段,以及两个阶段之间的间隙handleMessage阶段和最终页面渲染上屏完成前数据加载阶段四个区间组成。 具体来看&#x…

如何提高内存和cpu使用率呢?-Linux类资源

最近公司项目上线时,红蓝线巡检时,部分服务器因配置高但使用率低而需要降级。 为了避免降级,如何增加内存和CPU使用率? 这可以通过脚本来实现。 当前服务器操作系统版本:-7_5。 连接服务器后,登录账号。 …

深入理解Debug断点调试技巧

在软件开发过程中,调试是一个非常重要的环节,而使用断点是提高调试效率的关键技巧之一。本文将深入探讨如何利用断点进行高效的调试,常用的快捷键以及一些常见的断点调试技巧。 一、调试技巧: 1. 设置断点:在代码中设…

你配赚米吗?韭菜就在繁荣时进场!防诈P的最简单方法,还不告诉你爸妈?——早读(逆天打工人爬取热门微信文章解读)

你听到哪里好,你去了就是韭菜 引言Python 代码第一篇 人民日报 1460万,保住了!第二篇 人民日报 夜读 每一次努力,都是幸运的伏笔第三篇 人民日报 来啦 新闻早班车要闻社会政策 结尾 “故天将降大任于是人也,必先苦其心…

CMake 交叉编译

想知道“魔笛手”在这里能发挥什么作用吗?想象一下,把 CMake 当做法力高强的魔笛手,C 的项目则是故事中的那些被魔笛手拯救的孩子。 父母要抚养一个孩子并非易事,营养需要面面俱到,保证身体健康,关心事无巨…

【活动】探索人工智能的“迷惑瞬间”:真实体验与技术挑战

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 标题:探索人工智能的“迷惑瞬间”:真实体验与技术挑战引言…

vulhub中Weblogic 管理控制台未授权远程命令执行漏洞复现(CVE-2020-14882,CVE-2020-14883)

Weblogic是Oracle公司推出的J2EE应用服务器。在2020年10月的更新中,Oracle官方修复了两个长亭科技安全研究员voidfyoo 提交的安全漏洞,分别是CVE-2020-14882和CVE-2020-14883。 CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台&#x…

英飞凌电源管理PMIC的安全应用

摘要 本篇文档主要用来介绍英飞凌电源管理芯片TLF35584的使用,基于电动助力转向应用来介绍。包含一些安全机制的执行。 TLF35584介绍 TLF35584是英飞凌推出的针对车辆安全应用的电源管理芯片,符合ASIL D安全等级要求,具有高效多电源输出通道&…

[综述笔记]Graph Neural Networks in Network Neuroscience

论文网址:Graph Neural Networks in Network Neuroscience | IEEE Journals & Magazine | IEEE Xplore 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正&#xf…

阿里云服务器2核4G配置2024年活动价格及收费标准价格表

阿里云服务器2核4G配置2024年需要多少钱?2核4G配置的阿里云服务器选择不同实例规格和地域,其收费标准和活动价格都是不一样的,2024年3月1日,阿里云率先宣布云产品大规模调价,其中云服务器最高降幅达36%,因此…

计算机网络:网络层知识点汇总

文章目录 一、网络功能概述二、SDN基本概念三、路由算法与路由协议概述四、IP数据报格式五、IP数据报分片六、IPv4地址七、网络地址转换NAT八、子网划分和子网掩码九、无分类编址CIDR十、ARP协议十一、DHCP协议十二、ICMP协议十三、IPv6十四、RIP协议与距离向量算法十五、OSPF协…

qt-C++笔记之使用Cmake来组织和构建QWidget工程项目

qt-C笔记之使用Cmake来组织和构建QWidget工程项目 —— 杭州 2024-03-10 code review! 文章目录 qt-C笔记之使用Cmake来组织和构建QWidget工程项目1.运行2.文件结构3.CMakeLists.txt4.main.cpp5.widget.h6.widget.cpp7.widget.ui 1.运行 2.文件结构 3.CMakeLists.txt 代码 c…

Qt 数据库驱动未装载MYSQL

一、第一部分 0.Qt 连接mysql数据库时报错: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7 QT连接代码: bool createMysqlConn() {QSqlDatabase sqldb QSqlDatabase::addDatabase(&qu…

【算法面试题】-05

智能成绩表 class Student:def __init__(self):self.name "" # 学生名字self.scores [] # 每门课成绩students [Student() for _ in range(10004)] # 存储学生信息的数组 key_index 0 # 要排序的课程名的下标# 自定义排序函数 def student_comparator(a, b):…

中间件 | Redis - [基本信息]

INDEX 1 常规用法2 QPS3 pipeline 1 常规用法 分布式锁 最常见用法,需要注意分布式锁的redis需要单点 分布式事务 分布式事务中,核心的技术难点其实是分布式事务这个事本身作为数据的持久化 2PC,比如 seata 的 AT 模式下,将 un…

低功耗控制器结合Node-RED革新电力系统监控方式

现代电力行业的不断发展与技术进步,微电网ARM低功耗控制器与Node-RED的深度融合,为电力系统的智能化运维提供了崭新的解决方案。这一集成方案将硬件控制的高效稳定与软件逻辑处理的强大灵活性相结合,实现了对变电站设备、输电线路状态以及智能…

Importing ArkTS files to JS and TS files is not allowed. <etsLint> 解决方法

这个问题是 harmonyos 项目中 因为在ts中导入了 ets文件造成的 系统不需要在ts文件中 直接导入 ets文件 一般来讲 ts能写的代码 ets也可以 最简单的方式 就是直接将 ts 改为ets 右键文件 如下图选择 将后缀的ts改为 ets 就OK了

GEE:计算一个遥感影像的空像素占比

作者:CSDN @ _养乐多_ 本文将介绍,如何在 Google Earth Engine (GEE) 平台计算一个遥感影像的空像素占比,其中,包含获取研究区内所有像素的总数的代码,以及获取非空像素的总数的代码。 结果如下图所示, 文章目录 一、核心函数1.1 获取研究区内所有像素的总数1.2 获取非…

LeetCode刷题日志-46.全排列

跟77题组合一样,在这里又遇到同样的问题,如果使用暴力解法,nums大小不同,使用的循环嵌套的层数也不同。那么这时候我们就需要使用暴力的解法。 我们看以下代码,如果nums [1,2,3]会输出什么? class Soluti…

openssl3.2 - 官方demo学习 - encode - ec_encode.c

文章目录 openssl3.2 - 官方demo学习 - encode - ec_encode.c概述笔记产生ecc私钥产生ecc公钥测试工程END openssl3.2 - 官方demo学习 - encode - ec_encode.c 概述 官方demos/encode 目录中给了2个例子工程 功能是载入(RSA/ECC)公钥, 然后自己就可以拿内存中的公钥对象干活了…