Node服务

lishihuan大约 8 分钟

Node服务

node后端服务

https://blog.csdn.net/Naaaano/article/details/127363184open in new window

https://javascript.ruanyifeng.com/nodejs/express.htmlopen in new window

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://www.jianshu.com/p/2a145793bb83open in new window

第一步生成证书,第二步使用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:9443open in new window 进行验证。

添加定时器,便于观察服务是否在线

示例 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模块进行处理。这就是你遇到的错误信息。

要解决这个问题,你可以采取以下几种方法之一:

  1. 将脚本文件的扩展名改为.cjs,例如add_vuepress_menu.cjs,这样Node.js会将其视为CommonJS模块。
  2. package.json文件中将"type"字段的值改为"commonjs",以将整个项目视为CommonJS模块。
  3. 将脚本中的require语句改为import语句,以符合ES模块的语法要求。

node项目配置后台运行

https://code-examples.net/cn/q/49327aopen in new window 待整理

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 使用 systemctlsystemd-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.jsonpackage-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 应用程序的功能。