Nancy's Studio.

使用express+MySQL实现数据接口并部署

Word count: 1,031 / Reading time: 5 min
2019/07/08 Share

创建

1
2
3
npm init
npm install express --save
npm install ejs

创建main.js(init的时候选的文件名)和api、config、routers、src、views文件夹

项目结构

1
2
3
4
5
6
7
8
9
10
11
12
13
|── main.js   //入口文件
|── src //静态资源目录
│ ├── css
│ ├── js
│ └── images
|── api //接口目录
│ └── addUser.js //接口文件
|—— config //配置文件目录
| └── config.json
|—— routers //路由文件目录
| └── index.js
|—— views //模板文件目录
| └── index.ejs

实现

main.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const express = require('express');
const app = express();

/*文件路径处理*/
const path = require('path');

/*页面模板view处理*/
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

/*页面静态文件处理*/
app.use(express.static('src'));

/*页面路由处理*/
const index = require('./routers/index');
app.use('/', index);

/*接口路由处理*/
const addUser = require('./api/addUser');
app.use('/addUser', addUser);

/*接口数据body解析处理*/
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended : false }));

const server = app.listen(9000, function () {
console.log('success!');
})

routers>index.js

1
2
3
4
5
6
7
8
9
const express = require('express');
const router = express.Router();

/*设置首页路由get请求*/
router.get('/', function(req, res, next){
res.render('index', {title: 'Try express'});
})

module.exports = router;

views>index.ejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><%= title %></title>
<link rel='stylesheet' type="text/css" href="/css/style.css">
<script src="/js/jquery-3.1.1.min.js"></script>
</head>

<body>
<input id='name' name='name' type="text"/ placeholder="输入用户名">
<input id='btn' type="button" value="提交"/>

<script>
$('#btn').on('click', function(){
let name = $('#name').val();
console.log(name);
$.post('/addUser', {name: name}, function(data){
console.log(data);
alert('添加成功!');
});
})
</script>
</body>
</html>

config>config.json配置mysql信息

1
2
3
4
5
6
7
{
"host": "ip",
"port": "端口号",
"user": "用户名",
"password": "密码",
"database": "数据库名称"
}

api>addUser.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const express = require('express');
const router = express.Router();
const mysql = require('mysql');
const config = require('../config/config.json');

router.post('/', function(req, res){
/*连接数据库*/
const connection = mysql.createConnection(config);
connection.connect();

/*获取传进来的参数*/
var name = req.body.name || '';

/*构建添加用户语句,ID属性为auto_increment*/
var sql = "insert into user values("
+ "null,"
+ connection.escape(name)
+ ")";
//console.log(sql);

/*向数据库添加数据*/
connection.query(sql, function(err, rows, fields){
/*返回response*/
res.send({
status: 200,
data: rows,
err: err,
message: "success"
})
});
connection.end();
})
module.exports = router;

数据库连接问题

本地连接问题

报错client does not support authentication 的解决办法:

1
2
mysql> alter user '用户名'@'localhost' identified with mysql_native_password by '密码';
mysql> flush privileges;

远程连接问题

连接服务器数据库,被拒绝服务。

解决办法:Ubuntu设置MySQL允许远程访问,参考:链接

1
> sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

将bind-address = 127.0.0.1注释掉;

给root授予在任意主机(%)访问任意数据库的所有权限

1
mysql> grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option;

或者把root用户修改成允许远程主机访问

1
2
mysql> update user set host='%' where user='root' and host='localhost';
mysql> flush privileges;

完成后退出并重启mysql

1
>sudo service mysql restart

在Ubuntu服务器上配置node环境

安装nodejs

第一种办法:

1
2
3
4
5
6
7
8
9
sudo apt update

sudo apt install nodejs
sudo apt install npm
sudo apt install nodejs-legacy
npm config set registry http://registry.npm.taobao.org/

sudo npm install n -g
sudo n stable

第二种办法:(安装指定版本)

如安装Node.js v12.x:

1
2
3
# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

安装Express并运行

1
2
3
4
5
6
7
8
sudo npm install express-generator -g

#创建web应用程序
express express-app
cd express-app
npm install
#测试并启动
DEBUG=myapp:* npm start

可以在服务器的3000端口访问到这个express应用

安装pm2

1
2
3
4
5
sudo npm install pm2 -g

cd ~/express-app/
#使用pm2进程管理器运行express应用
pm2 start ./bin/www

如图所示,express应用正在pm2中运行,名称为www,id为0

显示更多信息

1
pm2 show www

查看日志

1
pm2 logs www

设置开机自启

1
2
pm2 startup systemd
sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u ubuntu --hp /home/ubuntu

参考:这里是链接

CATALOG
  1. 1. 创建
  2. 2. 实现
  3. 3. 数据库连接问题
    1. 3.1. 本地连接问题
    2. 3.2. 远程连接问题
  4. 4. 在Ubuntu服务器上配置node环境
    1. 4.1. 安装nodejs
    2. 4.2. 安装Express并运行
    3. 4.3. 安装pm2