Mockjs 造数据写入Mysql

Mock.js 是一个用于生成随机数据和拦截 Ajax 请求的库,常用于前端开发中对接口进行模拟。通过 Mock.js,可以快速生成各种类型的随机数据,包括但不限于文本、数字、日期、布尔值等,从而方便地进行数据模拟和测试。除了数据生成外,Mock.js 也可以拦截前端发送的 Ajax 请求,返回预先设定的模拟数据,使前端开发人员能够在没有后端支持的情况下进行接口调试及开发。

下面我们使用Mockjs生成数据,写入到Mysql数据库

下面是项目目录结构:

1
2
3
4
5
6
.
├── main.js
├── package.json
└── util
├── dbutil.js
└── mockutil.js

提前使用npm或cnpm安装所需要的依赖:

1
2
cnpm install mockjs --save
cnpm install mysql --save

数据库建表

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
34
35
36
37
38
39
40
41

CREATE TABLE aoc_flight_info_dw (
id BIGINT AUTO_INCREMENT COMMENT '主键' PRIMARY KEY,
flight_date DATE NOT NULL COMMENT '航班日期',
flight_no VARCHAR(10) NOT NULL COMMENT '航班号',
dep_airport VARCHAR(4) NOT NULL COMMENT '起飞机场',
arr_airport VARCHAR(4) NOT NULL COMMENT '到达机场',
transfer_number INT(10) DEFAULT 0 NOT NULL COMMENT '中转人数',
etd DATETIME NOT NULL COMMENT '预计起飞时间',
eta DATETIME NOT NULL COMMENT '预计到达时间',
exist_vip TINYINT(1) DEFAULT 0 NOT NULL COMMENT '是否有VIP旅客',
previous_delay TINYINT(1) DEFAULT 0 NOT NULL COMMENT '前段航班是否延误',
estimate_delay_time INT(10) DEFAULT 0 NOT NULL COMMENT '预计延误时间',
std DATETIME NOT NULL COMMENT '计划起飞时间',
sta DATETIME NOT NULL COMMENT '计划到达时间',
flight_type VARCHAR(10) NOT NULL COMMENT '航班性质',
d_or_i VARCHAR(10) NOT NULL COMMENT '国际/国内/地区',
ac_type VARCHAR(10) NOT NULL COMMENT '机型',
ac_reg VARCHAR(10) NOT NULL COMMENT '机号',
warn_level VARCHAR(10) NULL COMMENT '预警航班等级',
create_time DATETIME DEFAULT current_timestamp NOT NULL COMMENT '创建时间',
update_time DATETIME DEFAULT current_timestamp NOT NULL ON UPDATE current_timestamp COMMENT '更新时间',
CONSTRAINT unq_flight_idx UNIQUE (flight_date, flight_no, dep_airport, arr_airport)
) COMMENT '航班信息表同步数仓' CHARSET = utf8mb4;

CREATE INDEX aoc_flight_info_flight_date_idx ON aoc_flight_info_dw (flight_date, ac_reg);


CREATE TABLE aoc_passenger_info_dw (
id BIGINT AUTO_INCREMENT COMMENT '主键' PRIMARY KEY,
aoc_flight_id BIGINT NOT NULL COMMENT '航班信息表id',
passenger_name VARCHAR(100) DEFAULT '' NOT NULL COMMENT '姓名',
vip_type VARCHAR(10) DEFAULT '' NOT NULL COMMENT 'VIP类型',
vip_line VARCHAR(100) DEFAULT '' NOT NULL COMMENT 'VIP航程',
create_time DATETIME DEFAULT current_timestamp NOT NULL COMMENT '创建时间',
update_time DATETIME DEFAULT current_timestamp NOT NULL ON UPDATE current_timestamp COMMENT '更新时间'
) COMMENT 'VIP旅客信息表数仓同步' CHARSET = utf8mb4;

CREATE INDEX aoc_passenger_info_aoc_flight_id_idx ON aoc_passenger_info_dw (aoc_flight_id);


1. 连接Mysql数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var Mysql = require('mysql');

var conn = Mysql.createConnection({
host : '172.22.17.38',
user : 'u_tqd',
password : '62w5LjLi',
port: '3306',
database: 'tqddb',
});

exports.insert = function(sql, dim_arr){
conn.connect();
dim_arr.data.forEach(element=>{
conn.query(sql, element, function(err, result){
if(err){
console.log('err:', err.message);
}
console.log('------INSERT-------');
console.log('res:', result);
console.log('------SUCCESS-------');
});
})
conn.end();
}

2. 使用mock伪造数据

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
34
35
36
37
38
39
40
41
42
var Mock = require('mockjs');

exports.aoc_flight_info_dw = Mock.mock({
"data|500": [
[
"@increment(1)", // id
"@date('yyyy-MM-dd')", // flight_date
/^HO[0-9]{4}$/, // flight_no
/^[A-Z]{3}$/, // dep_airport
/^[A-Z]{3}$/, // arr_airport
"@integer(0, 20 )", // transfer_number
"@datetime('yyyy-MM-dd HH:mm:ss')", // etd
"@datetime('yyyy-MM-dd HH:mm:ss')", // eta
"@integer(0, 1 )", // exist_vip
"@integer(0, 1 )", // previous_delay
"@integer(1800, 18000 )", // estimate_delay_time
"@datetime('yyyy-MM-dd HH:mm:ss')", // std
"@datetime('yyyy-MM-dd HH:mm:ss')", // sta
"@integer(0, 3 )", // flight_type
/D|I|R/, // d_or_i
/A320|A321|B787|A319/, // ac_type
/^[0-9]{4}$/, // ac_reg
"@integer(0, 1 )", // warn_level
"@datetime('yyyy-MM-dd HH:mm:ss')", // create_time
"@datetime('yyyy-MM-dd HH:mm:ss')", // update_time
]
]
});

exports.aoc_passenger_info_dw = Mock.mock({
"data|500": [
[
"@increment(1)", // id
"@integer(0, 1000 )", // aoc_flight_id
"@cname()", // passenger_name
"@integer(0, 3 )", // vip_type
"@integer(0, 3 )", // vip_line
"@datetime('yyyy-MM-dd HH:mm:ss')",// create_time
"@datetime('yyyy-MM-dd HH:mm:ss')",// update_time
]
]
});

3. 编写main

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var mockutil = require('./util/mockutil.js');
var dbutil = require('./util/dbutil.js');

function aoc_flight_info_dw(){
var sql = 'INSERT INTO tqddb.aoc_flight_info_dw (id, flight_date, flight_no, dep_airport, arr_airport, transfer_number, etd, eta, exist_vip, previous_delay, estimate_delay_time, std, sta, flight_type, d_or_i, ac_type, ac_reg, warn_level, create_time, update_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);'
dbutil.insert(sql, mockutil.aoc_flight_info_dw);
}

function aoc_passenger_info_dw(){
var sql = 'INSERT INTO tqddb.aoc_passenger_info_dw (id, aoc_flight_id, passenger_name, vip_type, vip_line, create_time, update_time) VALUES (?,?,?,?,?,?,?);'
dbutil.insert(sql, mockutil.aoc_passenger_info_dw);
}

function main(){
//aoc_flight_info_dw();
aoc_passenger_info_dw()

}

main();