安装mysql
npm install mysql
创建管理mysql文件
创建dbManager.js
引入mysql
// 引入mysql
const mysql = require("mysql");
创建链接池
// 建立一个连接池
const db = mysql.createPool({
// 主机地址 (默认:localhost), 本地的只能默认为127.0.0.1
host: "127.0.0.1", // 数据库的IP地址(本地的或者是云服务器的都可以)
port: "3306",
// 用户名
user: "root",
// 密码
password: "12345678",
// 指定要操作哪个数据库
database: "lulu",
// 连接字符集(默认:‘UTF8_GENERAL_CI’,注意字符集的字母都要大写)
charset: "UTF8_GENERAL_CI"
});
导出数据库连接池对象
module.exports = db;
使用mysql
在需要使用数据的地方引入dbManager
// 引入
const db = require("./dbManager");
创建表
数据库表, 一般是在添加数据的时候创建, 添加数据步骤如下:
- 判断有没有该表, 如果有, 直接添加;
- 没有该表进行创建
- 创建完成之后再添加该数据
代码如下
apiRouter.post('/add', (req,res) => {
const {username, password} = req.body;
const hashedPassword = bcrypt.hash(password, 10);
// 验证表是否存在
const table = 'user_info';
const checkSql = `select 1 from ${table} limit 1`;
db.query(checkSql, error => {
if(error) {
// 如果不存在, 就创建表
let creatSql = `
create table user_info
(
id int(20) not null AUTO_INCREMENT,
name varchar(20),
pwd varchar(20) not null,
age int(4),
PRIMARY KEY (id)
)
`
// 如果表不存在就建立这个表,那么可以直接用 create table if not exists tablename 这样的指令来建立,不需要先去查询表是否存在。
db.query(creatSql, (error, results) => {
if(error){
// 如果创建失败就返回错误
console.log(error)
res.status(500).send('error occurred while creating table')
} else {
// 如果创建成功就插入数据
insertAction();
}
})
} else {
// 如果已经存在, 则直接插入数据
insertAction();
}
// 插入数据方法
function insertAction(){
// 插入数据, 如果id是自增属性, 则要对应名称插入值
let insertSql = `
insert into ${table}
(name, pwd, age)
values
(${username}, '', 0)
`;
// 插入数据
// let insertSql = `insert into user_info values (${id}, ${name}, '', 0)`;
db.query(insertSql, (error, results) => {
if(error){
// 创建失败
res.status(500).send('error occurred while creating account')
} else {
// 创建成功
res.status(201).send('account created successfully')
}
})
}
})
})
当然上面的insertAction方法也可以如下写法
// 插入数据方法
function insertAction(){
// 插入数据, 如果id是自增属性, 则要对应名称插入值
let insertSql = `
insert into ${table}
(name, pwd, age)
values
(?, ?, ?)
`;
const values = ['张三', '123', null]
db.query(insertSql, values, (error, results) => {
if(error){
// 创建失败
res.status(500).send('error occurred while creating account')
} else {
// 创建成功
res.status(201).send('account created successfully')
}
})
}
查询
apiRouter.get('/login', (req,res) => {
const {username, password} = req.query;
if(!username || !phoneReg.test(username)) {
res.send({code: 1, ErrorMsg: '请填写正确的用户名!'});
return;
}
if(!password || password.length < 5) {
res.send({code: 1, ErrorMsg: '请输入密码!'});
return;
}
db.query('SELECT * FROM user_info WHERE username = ?', [username], (error, results) => {
if (error) {
res.send({code: 1, ErrorMsg: error.code });
} else if (results.length === 0) {
res.send({code: 1, ErrorMsg: '暂无当前账号,请先注册!'});
} else {
const user = JSON.parse(JSON.stringify(results[0]));
bcrypt.compare(password, user.password, function(err, result) {
// result == true
if (err) {
console.error(err);
res.send({code: 1, ErrorMsg: 'Internal Server Error'});
} else if(result) {
const Token = createToken(user)
//删除密码信息
delete user.password;
user.roles = ['admin'];
res.send({code: 0, data: {
token: Token,
userInfo: user
}})
} else {
res.send({code: 1, ErrorMsg: '密码错误,请重试!'});
}
});
}
})
})
网友评论