Nodejs下的express编写后端接口的流程
- 安装Node.js和Express:
首先,确保系统上安装了Node.js。可以在Node.js官方网站上下载并安装最新版本。安装完Node.js后,可以使用Node包管理器(npm)来安装Express.js:
bash npm install express --save--save选项将Express添加到项目依赖中。 - 创建Express应用
在项目的根目录下,创建一个JavaScript文件(通常命名为
app.js或server.js)并开始编写Express应用。在文件中引入Express和创建一个应用实例:javascript const express = require('express'); const app = express(); const port = 3000; // 应用监听的端口号 // 其他代码将在下面补充 - 定义路由:
使用Express,可以定义不同的路由来处理不同的HTTP请求。例如,要创建一个简单的GET请求路由:
这个路由将匹配根路径(javascript app.get('/', (req, res) => { res.send('Hello, World!'); });/)的GET请求,并发送Hello, World!作为响应。 - 中间件:
Express中间件允许在请求到达路由处理程序之前或之后执行某些操作。例如,可以使用中间件来解析请求主体、验证用户、记录请求日志等。Express提供了许多内置的中间件,也可以编写自定义中间件。
javascript // 示例:使用内置中间件来解析JSON请求主体 app.use(express.json()); - 启动服务器:
最后,在应用的底部启动服务器并监听指定的端口:
javascript app.listen(port, () => { console.log(`Server is running on port ${port}`); }); - 运行应用:
在项目的根目录下,运行以下命令来启动Express应用:
或者,如果使用了Nodemon来监视文件变化,可以运行:bash node app.js
这会启动服务器,并在指定的端口上监听请求。bash nodemon app.js - 测试接口:
使用工具如Postman或者浏览器来测试接口。访问
http://localhost:3000(或者指定的端口)来测试创建的路由。
docker容器部署express+mysql生成器项目
- 服务器安装docker-compose,会自动安装docker,不然手动安装即可。
- 项目源代码地址:Team_Web_Graduated_Internship: 毕业实习 (gitee.com) 上传项目根目录下除node_modules文件夹的所有文件夹及文件到服务器指定目录中,编写Dockerfile镜像文件和docker-compose.yml容器编排文件:
Dockerfile# node采用最新版本的就好 # 首先,选择官方的 node 镜像作为项目的基础镜像。 FROM node MAINTAINER YeTing "wxw@graduate.info" WORKDIR /app # 安装forever进程、清楚npm缓存 RUN npm install -g forever RUN npm cache clean --force RUN npm cache clean --force --global # 接着,优先将 ./package.json 复制到镜像中,预先加载第三方依赖。 COPY ./package.json /app/ # 安装依赖 RUN npm install # 最后,将 Express 应用程序复制到容器 /app,暴露 3000 端口。 COPY . /app/ # Docker Container 之间是通过 link 机制来做通信的,EXPOSE 3000 ,是别的容器想要访问 该容器 3000 端口的前提条件。 EXPOSE 3000 CMD forever bin/wwwdocker-compose.yml- 太高版本的mysql容器好像不支持身份验证,以免麻烦,选择mysql5镜像,加载根目录下zhsq.sql卷到容器并运行zhsq.sql,从而直接使用身份验证机制
password()而不是SHA1()。./db/pool.js文件数据库连接池host地址需要更改为容器地址,可以是mysql。routers/users.jsmysql2模块采用PASSWORD()验证加密。
- exress的3000端口映射为服务器8080端口,MySQL容器的3306端口映射为服务器的3307端口(防止与服务器已有的mysql服务端口3306冲突)。同时,开启服务器安全组:8080、3307并备注。
- 容器可设置在同一网络环境net中,以保证进程正常运行。
version: '3' services: express: build: context: . dockerfile: Dockerfile ports: - 8080:3000 depends_on: - mysql networks: net: mysql: image: mysql:5 environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=zhsq - MYSQL_USER=zhsq_root - MYSQL_PASSWORD=123456 volumes: - ./zhsq.sql:/docker-entrypoint-initdb.d/zhsq.sql ports: - 3307:3306 networks: net: networks: net:- 太高版本的mysql容器好像不支持身份验证,以免麻烦,选择mysql5镜像,加载根目录下zhsq.sql卷到容器并运行zhsq.sql,从而直接使用身份验证机制
- 构建并运行容器:
- 全网最详细的Docker-Compose详细教程 - 掘金 (juejin.cn)
- 后台运行:
docker-compose up -d,查看日志:docker-compose logs - 实时运行,可以不用观察日志直接查看服务器express代码运行状态:
docker-compose up - 可进入express容器运行node环境,可进入MySQL容器bash命令行输入
mysql -u root =p与mysql数据库进行交互。docker ps—>docker exec -it 容器id bash// node环境中查看文件 const fs = require('fs'); fs.readFile('./routes/users.js', 'utf8', (err, data) => { if (err) { console.error(err); return; } console.log(data); });
- 遇到的问题及解决方法
- 第二次重新编排部署容器,如果是更改了数据库代码或者其他大的改动,则不能使用docker-compose build重构,否则容器运行内部还是上一次的代码,需要清除缓存重新构建(清缓存命令详见下文)。
- Mysql容器采用8版本的话使用SHA1(str)加密字符串,出现的问题是容器间的密码不能匹配,报错说node中mysql模块版本不满足实际的mysql服务器或者是MySQL版本仍然过低,但是在本地上采用最新的mysql版本和mysql:^2.3模块版本运行SHA1是没有问题的。于是,挣扎了一会,MySQL模块版本不变,MySQL容器改为5版本的,采用PASSWORD(str)加密方式。这种问题猜想是mysql内核采用MariDB的缘故,因为不使用docker容器,直接在linux服务器上部署express项目和安装mysql版本8的,SHA1()加密是可以直接运行的,而docker拉取的MySQL镜像则是采用MariDB分支。
清除docker缓存和node缓存
- docker编排出现问题需要重新拉取另一版本镜像时需要杀死容器进程
docker kill,停止容器docker stop,移除删除容器docker down&&docker rm,同时,清除docker缓存和node缓存。 - 要清除Docker Compose、Docker、和npm的缓存,您需要执行一些特定的操作。请注意,清除缓存可能会对系统产生一些影响,因此在执行这些操作之前,请确保您明白这些操作的影响,并备份重要数据。
清除Docker缓存:
-
清除Docker镜像缓存:
您可以使用以下命令清除Docker镜像缓存:
docker image prune -a这将删除未被使用的镜像,包括不再使用的中间层,以释放磁盘空间。
-
清除Docker容器缓存:
如果您还希望清除停止的Docker容器,可以使用以下命令:
docker container prune这将删除所有已停止的容器。
-
清除Docker卷和网络:
如果需要,您还可以清除未使用的卷和网络:
docker volume prune docker network prune这些命令将删除未使用的卷和网络。
清除Docker Compose缓存:
Docker Compose本身不会存储缓存,但它可能使用Docker缓存,所以在清除Docker缓存后,Docker Compose将不再使用旧的镜像和中间层。
清除npm缓存:
要清除npm的缓存,您可以使用以下命令:
npm cache clean --force
这将清除npm的本地缓存。
如果您希望清除全局npm缓存,可以运行:
npm cache clean --force --global
请注意,清除npm缓存可能会导致重新下载依赖项,因此执行此操作时可能需要一些时间,特别是对于大型项目。
总之,清除缓存是一个有用的维护操作,可以释放磁盘空间并确保您的环境保持干净。但请谨慎操作,确保备份重要数据,并明白执行这些操作的影响。
// node环境中查看文件
const fs = require('fs'); fs.readFile('./routes/users.js', 'utf8', (err, data) => { if (err) { console.error(err); return; } console.log(data); });
nginx容器部署uni-app(H5)项目
- Hbuild中,项目清单文件中进行H5配置:路由模式history,运行基础路径./,然后发行
网站-PC Web或手机H5(仅适用于uni-app)(H)云打包即可。 - 上传打包好的H5项目到服务器指定文件夹中。(web项目需要支持http协议才可以运行,因此需要远程机器上安装web服务器,如tomcat、apache、nginx等等),此处选nginx容器。
- 拉取nginx镜像,运行容器,查看http配置,将H5项目路径下的文件复制到容器目录下。
- 详细教程:本地项目部署到服务器——docker-nginx-腾讯云开发者社区-腾讯云 (tencent.com)