文档章节

node.js连接数据库基本操作、封装数据库操作,输出到网页

雨落秋垣
 雨落秋垣
发布于 2018/11/21 09:57
字数 1330
阅读 74
收藏 0

声明:以下代码测试通过,不同于直接的复制粘贴乱七八糟未测试的代码,完全可以用,最后会附上所有的代码和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    (腾讯微云,直接就可以下载)

© 著作权归作者所有

雨落秋垣

雨落秋垣

粉丝 32
博文 8
码字总数 10382
作品 3
深圳
前端工程师
私信 提问
JS服务端系列-nodejs+express+ejs+mongodb的数据显示

1.我们下载好mongodb数据库,这个程序我放在nodejs的目录下了, 我的nodejs是安装在d: nodejs目录下,看图可以看到我的存放位置,这个随便放置 2.打开cmd窗口,转到mongodb的bin目录下, 执行...

透笔度
2015/08/05
728
0
Mongoose,nodejs和mongodb的连接器。

简介 今天我们将学习Mongoose,什么是Mongoose呢,它于MongoDB又是什么关系呢,它可以用来做什么呢,介绍Mongoose之前,我们先简单了解一下MongoDB。 MongoDB是一个开源的NoSQL数据库,相比M...

笔阁
2015/10/13
2.3K
0
使用node.js + socket.io + redis实现基本的聊天室场景

使用node.js + socket.io + redis实现基本的聊天室场景 在这篇文章Redis数据库及其基本操作中介绍了Redis及redis-cli的基本操作. 其中的publish-subscribe机制应用比较广泛, 那么接下来使用n...

蜗牛奔跑
2017/10/18
50
0
你可能不知道的 10 个 Node.js 扩展模块

随着node.js的兴起和npm模块数量的增长,同步学习有用的以及独特的模块变得越来越困难。为了使大家学起来更方便,我整理了一些你可能不了解的并且不错的模块。 1.通行证 通行证是核实请求的简...

oschina
2013/08/08
2K
1
使用Puppeteer轻松爬取网易云音乐、QQ音乐的精品歌单

背景 最近在学习Puppeteer进行自动化操作,另一方面为了防止上班时间被打扰,是时候爬点歌单在上班的时候,用来抵抗外界的干扰了。 地址 项目完整代码地址:github.com/BingKui/WeC… 工具 ...

无聊小码农
2018/07/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

cookie

cookie: n. 饼干;小甜点 为什么会引入Cookie(在客户端保持http状态) 因为http协议是一种无状态协议,web服务器本身不能识别出哪些请求是同一个服务器发送的,浏览器的每一次请求都是独立...

五公里
3分钟前
0
0
PHP常用函数

<?php/** * 获取客户端IP * @return [string] [description] */function getClientIp() { $ip = NULL; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $arr = explode('......

半缘修道半缘君丶
4分钟前
0
0
go语言环境搭建

一、vscode安装go环境: 如果go get不成功,可以使用git clone url dir_name go get github.com/nsf/gocodego get github.com/uudashr/gopkgs/cmd/gopkgsgo get github.com/fatih/gom......

mbzhong
15分钟前
1
0
线程数究竟设多少合理

转载: 2016-03-29 58沈剑 架构师之路 一、需求缘起 Web-Server通常有个配置,最大工作线程数,后端服务一般也有个配置,工作线程池的线程数量,这个线程数的配置不同的业务架构师有不同的经...

xiaolyuh
15分钟前
2
0
jQuery使用serialize()方法输出序列化表单值

实例 输出序列化表单值的结果: $("button").click(function(){ $("div").text($("form").serialize()); }); 定义和用法 serialize() 方法通过序列化表单值,创建 URL 编码文本字符串。 您可......

前端老手
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部