
mysql的兼容升级npm包mysql2,mysql2兼容mysql的api语法。使用起来没有太大的
差别,但是mysql2在性能上面提升很大
mysql npm地址与文档地址
我们从文档中提取一点重点
// db.config.js
// 创建mysql连接
module.exports = {
host: 'localhost', // 服务器地址
user: '******', // mysql用户名称
password: '******', // mysql用户密码
port: '3306', // 端口
database: 'todolist', // 数据库名称
}
封装mysql的语句执行方法
// db.js
const mysql = require('mysql2');
const dbConfig = require('./db.config');
module.exports = {
query: function(sql, params, callback) {
//每次使用的时候需要创建链接,数据 *** 作完成之后要关闭连接
const connection = mysql.createConnection(dbConfig)
connection.connect(function(err) {
if (err) {
throw err
}
//开始数据 *** 作
connection.query(sql, params, function(err, results, fields) {
if (err) {
throw err
}
//将查询出来的数据返回给回调函数
callback &&
callback(
results ? JSON.parse(JSON.stringify(results)) : null,
fields ? JSON.parse(JSON.stringify(fields)) : null
)
//停止链接数据库,必须在查询语句后,要不然一调用这个方法,就直接停止链接,数据 *** 作就会失败
connection.end(function(err) {
if (err) {
console.log('关闭数据库连接失败!')
throw err
}
})
})
})
},
}
router.get('/userList', (req, res, next) => {
// sql查询user表
db.query('select * from list', [], function(results, fields) {
// 以json的形式返回
res.json({ results })
})
})
query的两种查询
connection.query('SELECT * FROM `books` WHERE `author` = "David"', function (error, results, fields) {
// error will be an Error if one occurred during the query
// results will contain the results of the query
// fields will contain information about the returned results fields (if any)
});
connection.query('SELECT * FROM `books` WHERE `author` = ?', ['David'], function (error, results, fields) {
// error will be an Error if one occurred during the query
// results will contain the results of the query
// fields will contain information about the returned results fields (if any)
});
获取受影响的行数
// 您可以从插入、更新或删除语句中获取受影响的行数。
connection.query('DELETE FROM posts WHERE title = "wrong"', function (error, results, fields) {
if (error) throw error;
console.log('deleted ' + results.affectedRows + ' rows');
})
获取更改的行数
您可以从更新语句中获取更改的行数。“changedRows”与“affectedRows”的不同之处在于它不计算值未更改的更新行。
connection.query('UPDATE posts SET ...', function (error, results, fields) {
if (error) throw error;
console.log('changed ' + results.changedRows + ' rows');
})
多语句查询
// 句查询会被SQL注入,如果确定想使用可以开启
var connection = mysql.createConnection({multipleStatements: true});
事务
// 开启一个简单的事务
connection.beginTransaction(function(err) {
if (err) { throw err; }
connection.query('INSERT INTO posts SET title=?', title, function (error, results, fields) {
if (error) {
return connection.rollback(function() {
throw error;
});
}
var log = 'Post ' + results.insertId + ' added';
connection.query('INSERT INTO log SET data=?', log, function (error, results, fields) {
if (error) {
return connection.rollback(function() {
throw error;
});
}
connection.commit(function(err) {
if (err) {
return connection.rollback(function() {
throw err;
});
}
console.log('success!');
});
});
});
});
Exception Safety 类型重铸
为方便起见,默认情况下,此驱动程序会将 mysql 类型转换为原生 JavaScript 类型。
| mysql | javascript |
|---|---|
| TINYINT | Number |
| SMALLINT | Number |
| INT | Number |
| MEDIUMINT | Number |
| YEAR | Number |
| FLOAT | Number |
| DOUBLE | Number |
| TIMESTAMP | Date |
| DATE | Date |
| DATETIME | Date |
| TINYBLOB | Buffer |
| MEDIUMBLOB | Buffer |
| LONGBLOB | Buffer |
| BLOB | Buffer |
| BINARY | Buffer |
| VARBINARY | Buffer |
| BIT (last byte will be filled with 0 bits as necessary) | Buffer |
| char | String |
| varchar | String |
| tinytext | String |
| mediumtext | String |
| longtext | String |
| text | String |
| enum | String |
| set | String |
| decimal | String |
| bigint | String |
| time | String |
| geometry | String |
使用express-generator来快速搭建一个项目
简单了解一下express-generator
后端路由文件var express = require('express');
var router = express.Router();
const db = require('../conf/db');
/* GET home page. */
router.get('/', function(req, res, next) {
res.send("123")
});
router.get('/userList', (req, res, next) => {
// sql查询user表
db.query('select * from list', [], function(results, fields) {
// 以json的形式返回
res.json({ results })
})
})
module.exports = router;
数据库配置文件
// db.config.js
// 创建mysql连接
module.exports = {
host: 'localhost', // 服务器地址
user: '******', // mysql用户名称
password: '******', // mysql用户密码
port: '3306', // 端口
database: 'todolist', // 数据库名称
}
封装mysql查询函数
// db.js
const mysql = require('mysql2');
const dbConfig = require('./db.config');
module.exports = {
query: function(sql, params, callback) {
//每次使用的时候需要创建链接,数据 *** 作完成之后要关闭连接
const connection = mysql.createConnection(dbConfig)
connection.connect(function(err) {
if (err) {
throw err
}
//开始数据 *** 作
connection.query(sql, params, function(err, results, fields) {
if (err) {
throw err
}
//将查询出来的数据返回给回调函数
callback &&
callback(
JSON.parse(JSON.stringify(results)),
JSON.parse(JSON.stringify(fields))
)
//停止链接数据库,必须在查询语句后,要不然一调用这个方法,就直接停止链接,数据 *** 作就会失败
connection.end(function(err) {
if (err) {
console.log('关闭数据库连接失败!')
throw err
}
})
})
})
},
}
启动项目
因为是get请求,其实可以直接在浏览器中调用,但是postman功能更丰富。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)