node.js连接数据库基本操作、封装数据库操作,输出到网页
声明:以下代码测试通过,不同于直接的复制粘贴乱七八糟未测试的代码,完全可以用,最后会附上所有的代码和sql文件
首先建立表,建表语句如下:
/* SQLyog Ultimate v12.08 (64 bit) MySQL - 5.7.17-log : Database - test ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=\'\'*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=\'NO_AUTO_VALUE_ON_ZERO\' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `test`; /*Table structure for table `websites` */ DROP TABLE IF EXISTS `websites`; CREATE TABLE `websites` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` CHAR(20) NOT NULL DEFAULT \'\' COMMENT \'站点名称\', `url` VARCHAR(255) NOT NULL DEFAULT \'\', `alexa` INT(11) NOT NULL DEFAULT \'0\' COMMENT \'Alexa 排名\', `country` CHAR(10) NOT NULL DEFAULT \'\' COMMENT \'国家\', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; /*Data for the table `websites` */ INSERT INTO `websites`(`id`,`name`,`url`,`alexa`,`country`) VALUES (1,\'Google\',\'https://www.google.cm/\',1,\'USA\'),(2,\'淘宝\',\'https://www.taobao.com/\',13,\'CN\'),(3,\'汪政\',\'https://www.google-api.ac.cn\',4689,\'CN\'),(4,\'微博\',\'http://weibo.com/\',20,\'CN\'),(5,\'Facebook\',\'https://www.facebook.com/\',3,\'USA\'); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
下面是数据库表的结构:
然后随便打开一个写代码的工具,建立(我的是Hbuilder,其他的原理相同),我的目录结构如下:
第一步:安装你需要安装mysql,或者使用云Mysql也可以
第二步:npm install mysql
下面就是具体的代码了:
查询数据
/** * node.js 操作数据库之查询数据 */ const mysql = require(\'mysql\'); let connection = mysql.createConnection({ host: \'localhost\', user: \'root\', password: \'root\', port: \'3306\', database: \'test\' }); connection.connect(); let sql = \'SELECT id,name,url,alexa,country FROM websites\'; //查 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();
添加数据
/** * node.js 操作数据库之添加数据 */ const mysql = require(\'mysql\'); let connection = mysql.createConnection({ host: \'localhost\', user: \'root\', password: \'root\', port: \'3306\', database: \'test\' }); connection.connect(); let addSql = \'INSERT INTO websites(id,name,url,alexa,country) VALUES(0,?,?,?,?)\'; let addSqlParams = [\'汪政\', \'https://www.baidu.com\',\'23453\', \'CN\']; connection.query(addSql, addSqlParams, function(err, result) { if(err) { console.log(\'[INSERT ERROR] - \', err.message); return; } console.log(\'--------------------------INSERT----------------------------\'); console.log(\'INSERT ID:\', result); console.log(\'-----------------------------------------------------------------\n\n\'); }); connection.end();
删除数据
/** * node.js 操作数据库之删除数据 */ const mysql = require(\'mysql\'); let connection = mysql.createConnection({ host: \'localhost\', user: \'root\', password: \'root\', port: \'3306\', database: \'test\' }); connection.connect(); let delSql = \'DELETE FROM websites where id = 7\'; //删 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();
修改数据
/** * node.js 操作数据库之修改数据 */ const mysql = require(\'mysql\'); let connection = mysql.createConnection({ host: \'localhost\', user: \'root\', password: \'root\', port: \'3306\', database: \'test\' }); connection.connect(); let modSql = \'UPDATE websites SET name = ?,url = ? WHERE name = ?\'; let modSqlParams = [\'汪政\', \'https://www.google-api.ac.cn\', \'汪政1\']; //改 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();
接下来就是封装MySQL的操作了(简化写代码,需要自己写SQL)
首先建立 db.js 文件,这个是数据库的具体信息,代码如下:
// 配置链接数据库参数 module.exports = { host: \'localhost\', port: 3306, // 端口号 database: \'test\', // 数据库名 user: \'root\', // 数据库用户名 password: \'root\' // 数据库密码 };
接着建立 dbhelper.js 文件(由于之前写java遗留下来的命名习惯…),代码如下:
const mysql = require(\'mysql\'); // 引入mysql模块 const databaseConfig = require(\'./db\'); // 引入数据库配置模块中的数据 // 向外暴露方法 module.exports = { query: function(sql, params, callback) { // 每次使用的时候需要创建链接,数据操作完成之后要关闭连接 let connection = mysql.createConnection(databaseConfig); connection.connect(function(err) { if(err) { console.log(\'数据库链接失败\'); throw err; } // 开始数据操作 // 传入三个参数,第一个参数sql语句,第二个参数sql语句中需要的数据,第三个参数回调函数 connection.query(sql, params, function(err, results, fields) { if(err) { console.log(\'数据操作失败\'); throw err; } // 将查询出来的数据返回给回调函数 callback && callback(results, fields); // results作为数据操作后的结果,fields作为数据库连接的一些字段 // 停止链接数据库,必须再查询语句后,要不然一调用这个方法,就直接停止链接,数据操作就会失败 connection.end(function(err) { if(err) { console.log(\'关闭数据库连接失败!\'); throw err; } }); }); }); } };
接下来我们建立测试用的 test.js 文件,测试封装的语句有没有问题:
const db = require(\'./dbhelper\'); // 查询实例 db.query(\'SELECT id,name,url,alexa,country FROM websites\', [], function(result, fields) { console.log(\'查询结果:\'); console.log(result); }); ////添加实例 //var addSql = \'INSERT INTO websites(id,name,url,alexa,country) VALUES(0,?,?,?,?)\'; //var addSqlParams = [\'汪政\', \'https://www.baidu.com\',\'23453\', \'CN\']; //db.query(addSql, addSqlParams, function(result, fields) { // console.log(\'添加成功\') //})
最后建立 test_web.js 文件 ,测试时候可以把数据输入到网页端,或者给别人调用:
const db = require(\'./dbhelper\'); let express = require(\'express\'); let app = express(); let arr = []; // 查询实例 db.query(\'SELECT id,name,url,alexa,country FROM websites\', [], function(result, fields) { app.get(\'/select\', function(req, res) { res.send(result); }); }); app.listen(3000);
结语:SQL语句,不要使用 * ,var let const 的用法这里不做阐述,一般都用var也是可以的,没必要分的那么清,强迫症的除外。最后的显示在网页端的,我只写了查询的,其实增删改查就是那样。其他的使用get或者post方法,传输参数就可以。时间有限,就不写多多于的呢。希望能帮到大家。
下载链接:https://share.weiyun.com/57CHAJg (腾讯微云,直接就可以下载)