上一个学历node.js RESTFul API,但是只有查、增、改的API,而Node.js既然是运行在服务端的js,自然也要能对数据库进行操作。
数据库
创建数据库:
CREAT DATABASE nodejs
创建表:
DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `movie` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
向表中添加一些数据:
INSERT INTO `role` VALUES ('1', '燕双鹰', '英雄'); INSERT INTO `role` VALUES ('2', '李元芳', '神探狄仁杰'); INSERT INTO `role` VALUES ('3', '张小敬', '长安十二时辰'); INSERT INTO `role` VALUES ('4', '紫霞仙子', '大话西游');
安装驱动
使用淘宝镜像安装。
连接数据库:
test.js:
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', database : 'test' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results[0].solution); });
运行:
OK,连接成功了。
连接参数:
参数 | 描述 |
host | 主机地址 (默认:localhost) |
user | 用户名 |
password | 密码 |
port | 端口号 (默认:3306) |
database | 数据库名 |
charset | 连接字符集(默认:‘UTF8_GENERAL_CI’,注意字符集的字母都要大写) |
localAddress | 此IP用于TCP连接(可选) |
socketPath | 连接到unix域路径,当使用 host 和 port 时会被忽略 |
timezone | 时区(默认:‘local’) |
connectTimeout | 连接超时(默认:不限制;单位:毫秒) |
stringifyObjects | 是否序列化对象 |
typeCast | 是否将列值转化为本地JavaScript类型值 (默认:true) |
queryFormat | 自定义query语句格式化方法 |
supportBigNumbers | 数据库支持bigint或decimal类型列时,需要设此option为true (默认:false) |
bigNumberStrings | supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false) |
dateStrings | 强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false) |
debug | 开启调试(默认:false) |
multipleStatements | 是否许一个query中有多个MySQL语句 (默认:false) |
flags | 用于修改连接标志 |
ssl | 使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件 |
增删改查
又到了熟悉的增删改查环节了。
查
test.js:
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', database : 'test' }); connection.connect(); var sql = 'SELECT * FROM role'; //查 connection.query(sql,function (err, result) { if(err){ console.log('[SELECT ERROR] - ',err.message); return; } console.log('--------------------------SELECT----------------------------'); console.log(result); console.log('------------------------------------------------------------\n\n'); }); connection.end();
运行:
增
test.js:
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', database : 'test' }); connection.connect(); var addSql = 'INSERT INTO role(name,movie) VALUES(?,?)'; var addSqlParams = ['洪世贤', '回家的诱惑']; //增 connection.query(addSql,addSqlParams,function (err, result) { if(err){ console.log('[INSERT ERROR] - ',err.message); return; } console.log('--------------------------INSERT----------------------------'); //console.log('INSERT ID:',result.insertId); console.log('INSERT ID:',result); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();
执行:
看一下数据库:
新增数据已经在里面了。
改
test.js:
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123456', database : 'test' }); connection.connect(); var modSql = 'UPDATE role SET movie= ? WHERE Id = ?'; var modSqlParams = ['品如衣之清醒渣男传',5]; //改 connection.query(modSql,modSqlParams,function (err, result) { if(err){ console.log('[UPDATE ERROR] - ',err.message); return; } console.log('--------------------------UPDATE----------------------------'); console.log('UPDATE affectedRows',result.affectedRows); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();
执行:
查看数据库:
洪世贤的movie已经改了。
删
test.js:
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : 'xing0515', database : 'nodejs' }); connection.connect(); var delSql = 'DELETE FROM role where id=5'; //删 connection.query(delSql,function (err, result) { if(err){ console.log('[DELETE ERROR] - ',err.message); return; } console.log('--------------------------DELETE----------------------------'); console.log('DELETE affectedRows',result.affectedRows); console.log('-----------------------------------------------------------------\n\n'); }); connection.end();
运行:
查看数据库:
好了,洪世贤没了。
当然写几个函数交给server.js调用也是可以的。
参考:
【1】、https://www.runoob.com/nodejs/nodejs-mysql.html
【2】、http://how2j.cn/k/nodejs/nodejs-mysql/1768.html#nowhere