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    (騰訊微雲,直接就可以下載)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM