Node服务
Node服务
node后端服务
1. 项目初始化
创建一个空文件夹
npm init -y
2.安装express框架
npm install express
3.搭建服务端
在根目录创建app.js文件,写入下面代码:
'Content-Type': 'application/json;charset=utf-8'
console.log(req.body)
const express = require('express')
const app = express()
// 解决跨域问题
app.all("*",function(req,res,next){
// 设置允许跨域的域名,*代表允许任意域名跨域
res.header('Access-Control-Allow-Origin','*');
// 允许的header类型
res.header('Access-Control-Allow-Headers','content-type');
// 跨域允许的请求方式
res.header('Access-Control-Allow-Methods','DELETE,PUT,POST,GET,OPTIONS');
if(req.method.toLowerCase() == 'options')
res.sendStatus(200); // 让options 尝试请求快速结束
else
next();
})
// 使用json格式解析请求体
app.use(express.json())
// 接口
app.post('/testPost', (req, res) => {
// 业务操作
// 发送响应
res.send({
code: 0,
data: `后端收到了前端发来的信息:${req.body.xxx}`,
msg: '请求成功'
})
})
app.get('/testGet', (req, res) => {
// 发送响应
res.send({
code: 200,
data: '请求成功',
msg: '请求成功'
})
})
// 启动 node app.js
app.listen(3001, () => console.log('Server is open in 3001'))
4.启动
## 控制台输入
node app.js
看到 Server is open in 3001 被打印出来了,服务端就启动成功了。
5.接口访问
注意是 post请求,浏览器无法访问
localhost:3001/testGet
node创建web服务器
创建 node 项目,并安装 express,通过 express 快速创建 web 服务器,将 vue 打包生成的 dist 文件夹, 托管为静态资源即可
具体实现:
2.1 初始化npm
新建文件夹,然后命令行执行 npm init
运行完之后会出现一个package.json的配置文件,说明初始化npm成功
2.2 安装express
执行 npm i express
2.3 创建app.js 文件
const express = require('express')
// 创建 web 服务器
const app = express()
// 托管静态资源
app.use(express.static('./dist'))
// 启动 web 服务器
app.listen(80, () => {
console.log('web server running at http://127.0.0.1')
})
2.4 其他功能
待整理
node创建https服务
第一步生成证书,第二步使用https模块启动服务。
生成自签名证书
这里因为是自己开发测试使用,因此就简单点使用自签名证书了。
使用 openssl 命令生成服务器私钥文件
openssl genrsa -out server.key 2048
生成证书请求
openssl req -new -key server.key -out server.csr
根据私钥和证书请求生成证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
使用nodejs的https模块
创建一个express项目(可以参考express官方文档),修改 app.js 文件,主要是问最后几行创建 https server部分。
var express = require('express');
var path = require('path');
var http = require('http');
var https = require('https');
var fs = require('fs');
var app = express();
app.get('/', function(req, res, next) {
res.send('hello world');
});
var httpServer = http.createServer(app);
httpServer.listen(9080);
const options = {
key: fs.readFileSync('./server.key'),
cert: fs.readFileSync('./server.crt')
};
var httpsServer = https.createServer(options, app);
httpsServer.listen(9443);
测试
使用 “node app.js” 或 ”npm start“ 启动服务,然后访问 https://localhost:9443 进行验证。
添加定时器,便于观察服务是否在线
示例 Node.js 脚本 (your-script.js)
console.log('Node.js script running as a background process.');
setInterval(() => {
console.log('Script is still running...');
}, 5000);
解释
- 您可以替换
console.log为实际的业务逻辑。 - 上述脚本每 5 秒输出一条日志,以示程序仍在运行。
node执行脚本
在JavaScript中,有两种模块系统:CommonJS和ES模块。它们有不同的语法和加载方式。在Node.js中,默认使用的是CommonJS模块系统,其中使用require关键字来引入模块。而ES模块是ES6引入的标准模块系统,使用import关键字来引入模块。
当Node.js检测到文件扩展名为.js且包含package.json文件中的"type"字段设置为"module"时,它会将该文件视为ES模块进行处理。这就是你遇到的错误信息。
要解决这个问题,你可以采取以下几种方法之一:
- 将脚本文件的扩展名改为
.cjs,例如add_vuepress_menu.cjs,这样Node.js会将其视为CommonJS模块。 - 在
package.json文件中将"type"字段的值改为"commonjs",以将整个项目视为CommonJS模块。 - 将脚本中的
require语句改为import语句,以符合ES模块的语法要求。
node项目配置后台运行
1. 利用 forever
forever是一个nodejs守护进程,完全由命令行操控。forever会监控nodejs服务,并在服务挂掉后进行重启。
# 1.安装 forever
npm install forever -g
# 2.启动服务
forever start
# 3、使用 forever 启动 js 文件
forever start index.js
# 4、停止 js 文件
forever stop index.js
# 5、启动js文件并输出日志文件
forever start -l forever.log -o out.log -e err.log index.js
# 6、重启js文件
forever restart index.js
# 7、查看正在运行的进程
forever list
# 重启全部
forever restartall #重启所有应用
2. 使用pm2 (感觉好用点)
pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能
npm install -g pm2
# 启动
pm2 start app.js
# 启动 使用所有CPU核心的集群
pm2 start app.js -i max
# 停止
pm2 stop app.js
# 停止所有
pm2 stop all
# 重启
pm2 restart app.js
# 重启所有
pm2 restart all
# 关闭
pm2 delete app.js
# 查看进程
pm2 list
# 查看某个进程的详细信息 [通过pm2 list 查询进程的id号,例如:pm2 describe 0]
pm2 describe id
# 查看进程日志
pm2 logs
# 这个命令会显示所有进程的日志。如果你只想查看某个特定进程的日志,可以指定进程名称或 ID,例如:
pm2 logs app
pm2 logs 0
# 查看进程的资源使用情况
pm2 monit
#查看进程的状态和指标
pm2 status
设置开机自启
pm2 start app.js
pm2 save # 保存当前的应用列表:
pm2 startup # 配置 PM2 启动时自动恢复
补充
给为每个项目设置不同的工作目录
pm2 start /path/to/project1/app.js --name "project1"
3. 使用 nohub
nodejs 自带node.js自带服务nohub,不需要安装别的包。 缺点:存在无法查询日志等问题,关闭终端后服务也就关闭了, 经测试是这样的。
nohup node ***.js &
4. 使用 screen 命令
screen 创建一个独立的会话,即使关闭终端,会话仍然存在。
screen -S your-session
node your-script.js
node your-script.js: 在会话中运行你的 Node.js 脚本。screen -S your-session: 创建一个名为your-session的会话。
5. 使用 tmux 命令
tmux 也是一个终端复用器,类似于 screen。
tmux new-session -s your-session
node your-script.js
node your-script.js: 在会话中运行你的 Node.js 脚本。tmux new-session -s your-session: 创建一个名为your-session的会话。
6. 使用系统服务管理器
Windows 使用
sc命令或 Windows服务管理工具Linux 使用
systemctl或systemd-service命令
示例 (Linux)
sudo cp your-script.service /etc/systemd/system/
sudo systemctl enable your-script.service
sudo systemctl start your-script.service
示例 (Windows)
sc create your-service binPath= "node your-script.js" start= auto
net start your-service
7. 使用 Docker 容器
将 Node.js 应用程序打包成 Docker 镜像,然后运行容器。
- 创建 Node.js 应用。
- 创建
Dockerfile文件,定义构建镜像的步骤。 - 使用
docker build构建镜像。 - 使用
docker run启动容器并映射端口。 - 访问应用程序并确保它正常工作。
步骤 1: 创建 Dockerfile
# 使用官方的 Node.js 镜像作为基础镜像
FROM node:16
# 设置工作目录
WORKDIR /usr/src/app
# 将 package.json 和 package-lock.json 复制到容器中
COPY package*.json ./
# 安装项目的依赖
RUN npm install
# 将整个应用代码复制到容器中
COPY . .
# 容器启动时运行 Node.js 应用
CMD ["node", "app.js"]
# 暴露应用程序监听的端口
EXPOSE 3000
FROM node:16:选择基于 Node.js 16 版本的官方 Docker 镜像作为基础镜像。WORKDIR /usr/src/app:设置工作目录,后续的文件操作都将在该目录下进行。COPY package*.json ./:将package.json和package-lock.json文件复制到容器中,确保在安装依赖之前不会遗漏任何依赖配置。RUN npm install:安装依赖。COPY . .:将当前应用程序的所有文件复制到 Docker 容器中。CMD ["node", "app.js"]:指定容器启动时执行的命令。EXPOSE 3000:暴露容器的 3000 端口,这是应用程序监听的端口。
步骤 2: 构建 Docker 镜像
在包含 Dockerfile 的目录中运行以下命令来构建 Docker 镜像:
docker build -t my-node-app .
-t my-node-app:给镜像命名为my-node-app。.:表示当前目录为构建上下文。
构建过程中,Docker 会按照 Dockerfile 中的步骤逐步构建镜像。
步骤 3: 运行 Docker 容器
构建完成后,可以使用以下命令运行容器:
docker run -p 3000:3000 my-node-app
-p 3000:3000:将容器内的 3000 端口映射到主机的 3000 端口。my-node-app:是你之前构建的 Docker 镜像的名称。
步骤4: 访问应用程序
如果一切顺利,应用程序应该会在容器中启动,并且可以通过浏览器访问 http://localhost:3000。
你应该看到页面显示 Hello, Docker!。
可选步骤:后台运行容器
如果你希望容器在后台运行,可以加上 -d 参数:
bashdocker run -d -p 3000:3000 my-node-app
-d:表示后台模式运行容器。
你可以通过以下命令来查看正在运行的容器:
docker ps
步骤 5: 停止和删除容器
如果你希望停止运行中的容器,可以使用以下命令:
docker stop <container_id>
如果你不再需要该容器,可以删除它:
docker rm <container_id>
运行容器
docker build -t your-image .
docker run -d --name your-container your-image
使用 Kubernetes
- 将 Node.js 应用程序部署到 Kubernetes 集群。
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-app
spec:
replicas: 1
selector:
matchLabels:
app: your-app
template:
metadata:
labels:
app: your-app
spec:
containers:
- na me: your-app
image: y our-image
ports:
- containerPort: 3000
- AWS Elastic Beanstalk、Google Cloud App Engine、Azure App Service 等云平台都提供了部署和管理 Node.js 应用程序的功能。