发布于 

Node-Express后台应用开发过程记录

快速部署express项目(简单版)

主要参考博客

程序版本
  • 操作系统 CentOS7
  • mysql 5.7.44
  • nvm 0.38.0
    • node v22.11.0

Express服务器搭建

快速搭建Express服务器-参考博客

使用Express应用程序生成器快速创建应用骨架:

1
npx express-generator

安装依赖:

1
npm install

安装nodemon支持热加载:

1
npm i -g nodemon

修改package.json中的scripts的start脚本:

1
2
3
4
5
{
"scripts": {
"start": "nodemon ./bin/www"
}
}

nodemon通过监听项目根目录下的文件变动,自动重启项目

修改服务的默认端口(3000):

1
2
// app.js
process.env.PORT = 8090 // 自定义端口
express连接mysql数据库

在根目录下创建dataBase文件夹:

  • dataBase
    • api.js 查询数据库接口
    • config.js 数据库配置文件
    • db.js 数据库连接文件
1
2
3
4
5
6
7
8
9
10
11
12
module.exports = {
db: {
host: '127.0.0.1',
port: 3306,
user: 'root',
password: '123456',
database: 'test_db',
connectTimeout:10000,
useConnectionPool: true,
}
}

1
2
3
4
5
// 连接数据库
const mysql = require('mysql')
const config = require('./config.js').db
// 连接数据库
module.exports = mysql.createConnection(config)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const connection = require('./db')
// 数据库查询
const getService = () =>{
return new Promise((resolve, reject) => {
connection.query("select * from Server", (err,data) => {
if(err){
reject(err)
}else{
resolve(data)
}
})
})
}
module.exports = {
getService
}

服务器配置MySql

CentOS环境安装Mysql-参考博客

常用命令:

1
2
3
4
5
6
7
8
# 开启mysql服务
systemctl start mysqld.service

# 进入mysql命令台
mysql -u root -p

# 配置my.cnf
vim /etc/my.cnf

还没有账号和密码时,可以在my.cnf中配置跳过密码:

1
2
#...
skip-grant-tables

修改过my.cnf文件之后,需要重启mysql服务:

1
service mysqld restart
修改Mysql密码

参考博客:

需要使用mysql命令行进行修改,
进入mysql数据库:

1
use mysql;

查询表修改密码:

1
alter user 'root'@'localhost' identified by 'NewPassword';

最后一定要刷新一下mysql:

1
flush privileges;

服务器配置git

参考博客:

安装git命令:

1
yum -y install git

设置git全局用户名、邮箱地址、密码:

1
2
3
git config --global user.name "xxx"
git config --global user.email "xxx"
git config --global user.password "xxx"

express服务建库提交,考虑到国内网络,选用的是gitee仓库,

遇到问题:每次git pull都需要我重新输入用户名和密码,
使用命令存储认证信息:

1
git config --global credential.helper store

服务器配置NVM

到了坑最多的一步

安装参考

安装nvm:

1
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.3/install.sh | bash

安装指定版本的node:

1
nvm install v22.11.0
node运行报错问题

参考博客:

查看node版本:

1
node -v

这时出现报错:

1
2
3
4
5
6
7
-bash-4.2# node -v
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)

大概意思就是缺少对应版本的几个lib64下的文件,需要手动安装一下,
主要解决方案见参考博客(花很长时间解决好烦)

Nginx托管服务

主要参考博客

运行Node项目

把代码库拉下来,npm i安装依赖之后,
使用pm2进行服务托管:

1
2
3
4
5
6
7
8
# 全局安装pm2
npm i -g pm2

# pm2启动应用程序
pm2 start npm --name "your-server-name"

# 查看pm2启动服务列表
pm2 list

在服务器上开放对应的服务端口

Nginx代理配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 80;
server_name cocos-test.e-duck.xyz;
location / {
# 允许跨域
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
proxy_set_header X-Real-IP $remote_addr;
# 获取用户IP
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header Connection "";
# 服务开启的地址
proxy_pass http://127.0.0.1:8090;
}

}

其它

Express获取请求IP地址

需要借助库:IP2Region

1
npm i ip2region

引入并使用ip2region:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const IP2Region = require('ip2region').default;
router.get("/welcome",(req,res)=>{
// 需要配合nginx的配置,在x-forwarded-for中提取用户ip
let ip = req.headers['x-forwarded-for'] || req.ip
// 建立新的查询
const query = new IP2Region()
// 获取ip地址
/**
* {
* country:"中国",
* province:"XX省",
* city:"XX市",
* isp:"移动",
* }
*/
const ipAddress = query.search(ip)
res.send({
code:200,
data:ipAddress
})
})

nginx需要修改header配置:

1
2
3
4
5
6
7
8
server {
listen 80;
server_name xxxxxx;
location / {
# ...
proxy_set_header X-Forwarded-For $remote-addr;
}
}

Nodejs连接数据库频繁掉线

问题描述

使用Nodejs连接Mysql时频繁掉线,
报错:PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR