日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用express搭建服务器获取MySQL数据库数据

發布時間:2024/7/5 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用express搭建服务器获取MySQL数据库数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、原始的mysql查詢方法

  • 先安裝mysql cnpm install mysql --save

  • 引入這個db.js之后,才能對數據庫進行查詢

  • 進行查詢

  • 查詢結果如下:

  • 二、ORM 介紹

    ORM 全拼Object-Relation Mapping.

    中文意為 對象-關系映射.

    主要實現模型對象到關系數據庫數據的映射.

    比如:把數據庫表中每條記錄映射為一個模型對象

    優點 :

    ? 1、只需要面向對象編程, 不需要面向數據庫編寫代碼.

    ? 2、對數據庫的操作都轉化成對類屬性和方法的操作.

    ? 3、不用編寫各種數據庫的sql語句.

    ? 4、實現了數據模型與數據庫的解耦, 屏蔽了不同數據庫操作上的差異.

    ? 5、不在關注用的是mysql、oracle…等.

    ? 6、通過簡單的配置就可以輕松更換數據庫, 而不需要修改代碼.

    缺點 :

    ? 1、相比較直接使用SQL語句操作數據庫,有性能損失.

    ? 2、根據對象的操作轉換成SQL語句,根據查詢的結果轉化成對象, 在映射過程中有性能損失.

    ? 3、有局限性,ORM中沒有提供的查詢功能需要寫會sql語句

    三、ORM的基本使用(增刪改查)

  • 把nodejs-orm文件夾復制到db文件夾下,并修改其中index.js中的數據庫連接設置
  • const mysql = require('mysql'); // 數據庫連接設置 let orm_config = {host: 'localhost',//數據庫地址port:'3306',user: 'root',//用戶名,沒有可不填password: 'root',//密碼,沒有可不填database: 'myemployees'//數據庫名稱 }let options = {}; let tableSQL = ''; let isConnect = false;function Model(name, option) {this.name = name;this.option = option; };/** * @description: 查詢數據 * @param {} options:可選參數 * @param {Function} callback :(req,results)=>{} */ Model.prototype.find = function (options, callback) {if (!isConnect) {console.log(options.constructor);this.connect(err => {isConnect = true;var str = '';if (!callback) {str = `select * from ${this.name}`;callback = options;} else if (options.constructor == Array) {str = `select ${options.join()} from ${this.name}`;} else {str = `select * from ${this.name} where ${options}`;};//console.log(str);connection.query(str, (error, results, fields) => {callback(error, results, fields);});return this;})} else {var str = '';if (!callback) {str = `select * from ${this.name}`;callback = options;} else if (options.constructor == Array) {str = `select ${options.join()} from ${this.name}`;} else {str = `select * from ${this.name} where ${options}`;};//console.log(str);connection.query(str, (error, results, fields) => {callback(error, results, fields);});return this;}};/** * @description: 分頁查詢 * @param {Object} options : { where:查詢條件, number: 當前頁數 , count : 每頁數量 } * @return: */ Model.prototype.limit = function (options, callback) {var str = '';if (!options.where) {str = `select * from ${this.name} limit ${(options.number - 1) * options.count},${options.count}`;} else {str = str = `select * from ${this.name} where ${options.where} limit ${(options.number - 1) * options.count},${options.count}`;};console.log(str);connection.query(str, (error, results, fields) => {callback(error, results, fields);});return this; };/** * @description: 插入數據 * @param {Object} obj:對象或者數組 * @param {Function} callback :(req,results)=>{} */ Model.prototype.insert = function (obj, callback) {if (!isConnect) {this.connect(err => {if (err) {throw err;} else {connection.query(tableSQL, (error, results, fields) => {if (Array.isArray(obj)) {for (var i = 0; i < obj.length; i++) {this.insertObj(obj[i], callback)}} else {this.insertObj(obj, callback)}});}});} else {if (Array.isArray(obj)) {for (var i = 0; i < obj.length; i++) {this.insertObj(obj[i], callback)}} else {this.insertObj(obj, callback)}}};Model.prototype.insertObj = function (obj, callback) {let keys = [];let values = '';for (var key in obj) {keys.push(key);values += `"${obj[key]}",`;};values = values.replace(/,$/, '');let str = `INSERT INTO ${this.name} (${keys.join()}) VALUES (${values})`;connection.query(str, (error, results, fields) => {callback(error, results);}); }/** * @description: 更新數據 * @param {Object} option:可選參數 更新條件 * @param {Object} obj: 修改后的數據 * @param {Function} callback :(req,results)=>{} */ Model.prototype.update = function (option, obj, callback) {let str = '';if (arguments.length == 2) {callback = obj;obj = option;str = `UPDATE ${this.name} SET `;for (var key in obj) {str += `${key}='${obj[key]}', `;};str = str.replace(/(, )$/, '');} else {str = `UPDATE ${this.name} SET `;for (var key in obj) {str += `${key}='${obj[key]}', `;};str = str.replace(/(, )$/, '');str += ` where ${option}`;};console.log(str);connection.query(str, (error, results, fields) => {callback(error, results, fields);});return this;};/** * @description: 刪除數據 * @param {Object} option:可選參數 刪除條件 * @param {Function} callback :(req,results)=>{} */ Model.prototype.delete = function (option, callback) {var str = '';if (!callback) {str = `delete from ${this.name}`;callback = option;} else {str = `delete from ${this.name} where ${option}`;};console.log(str);connection.query(str, (error, results, fields) => {callback(error, results, fields);});return this; };/** * @description: 執行sql語句 * @param {String} str : sql語句 * @param {Function} callback :(req,results)=>{} */ Model.prototype.sql = function (str, callback) {connection.query(str, (error, results, fields) => {callback(error, results, fields);});return this; };/** * @description: 刪除model表格 (慎用!) * @param {type} * @return: */ Model.prototype.drop = function (callback) {connection.query(`DROP TABLE ${this.name}`, (error, results, fields) => {callback(error, results, fields);});return this; };//連接檢測 Model.prototype.connect = function (callback) {let p1 = new Promise((resolve, reject) => {connection.connect((err) => {if (err) {//console.log(err.stack);//console.log(err);//42000 數據庫不存在 28000賬號錯誤//console.log(err.sqlState);//42000 數據庫不存在 28000賬號錯誤reject(err);} else {resolve();}});});p1.then(() => {callback(null);}, err => {if (err.sqlState == 42000) {createDatabase(callback);} else if (err.sqlState == 28000) {callback('數據庫賬號或密碼錯誤');} else {callback(err);}}); };//創建數據庫 let createDatabase = function (callback) {let p2 = new Promise((resolve, reject) => {connection = mysql.createConnection({host: options.host,//數據庫地址port: options.port,//端口號user: options.user,//用戶名,沒有可不填password: options.password,//密碼,沒有可不填});connection.connect((err) => {//if (err) throw error;if (err) {reject(err);} else {resolve();}});});let p3 = new Promise((resolve, reject) => {connection.query(`CREATE DATABASE ${options.database}`, (err, results, fields) => {//if (error) throw error;if (err) {reject(err);} else {resolve();}});});let p4 = new Promise((resolve, reject) => {connection.query(`use ${options.database}`, (err, results, fields) => {if (err) {reject(err);} else {resolve();}});});let pAll = Promise.all([p2, p3, p4]);pAll.then(() => {callback(null);}).catch((err) => {callback(err);}); }let orm = {/*** @description:連接數據庫* @param {String} host: 主機名 默認localhost* @param {Number} port: 端口號 默認3306* @param {String} user: 用戶名 * @param {String} password: 密碼 * @param {String} database: 數據庫名稱 默認og* @return: */connect: function ({ host = 'localhost', port = 3306, user = '', password = '', database = 'og' }) {databaseName = database;//全局存儲當前數據庫名稱options = {host,//數據庫地址port,//端口號user,//用戶名,沒有可不填password,//密碼,沒有可不填database//數據庫名稱};connection = mysql.createConnection(options);},/*** @description:創建model (表格模型對象)* @param {String} name:表格名稱* @param {Object} options:表格數據結構* @return: Model對象:負責數據庫增刪改查*/model: function (name, options) {let str = 'id int primary key auto_increment, ';for (var key in options) {if (options[key] == Number) {str += `${key} numeric,`;} else if (options[key] == Date) {str += `${key} timestamp,`;} else {str += `${key} varchar(255),`;}};str = str.replace(/,$/, '');//console.log(`CREATE TABLE ${name} (${str})`);//console.log(str);tableSQL = `CREATE TABLE ${name} (${str})`;return new Model(name, options);} };orm.connect(orm_config);module.exports = orm;

    3.1、查詢數據

    查詢所有員工的所有信息:

    const db = require("./db/nodejs-orm/index.js"); app.get("/get_data", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let employees = db.model("employees")employees.find((err, data)=> {if(err) {console.log(err)return;}res.send(data)})// res.send('orm') })

    查詢指定字段(find、數組參數):

    const express = require('express') const db = require('./db/nodejs-orm/index.js')const app = express()app.get("/get_data", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let employees = db.model("employees")employees.find((err, data)=> {if(err) {console.log(err)return;}res.send(data)})// res.send('orm') })app.get("/get_data2", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let employees = db.model("employees")employees.find(["first_name","last_name"],(err, data)=> {if(err) {console.log(err)return;}res.send(data)})// res.send('orm') })app.listen(3000, ()=> {console.log("服務器已經啟動,端口為:3000") })


    按條件查詢(find、字符串參數):

    const express = require('express') const db = require('./db/nodejs-orm/index.js')const app = express()app.get("/get_data", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let employees = db.model("employees")employees.find((err, data)=> {if(err) {console.log(err)return;}res.send(data)})// res.send('orm') })app.get("/get_data2", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let employees = db.model("employees")employees.find(["first_name","last_name"],(err, data)=> {if(err) {console.log(err)return;}res.send(data)})// res.send('orm') }) app.get("/get_data3", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let employees = db.model("employees")employees.find("first_name='Steven'",(err, data)=> {if(err) {console.log(err)return;}res.send(data)})// res.send('orm') })app.listen(3000, ()=> {console.log("服務器已經啟動,端口為:3000") })


    分頁查詢(limit、對象參數 where\number\count):

    app.get("/get_data_limit", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let employees = db.model("employees")//where查詢條件,為可選項,number第幾頁; count表示每頁條數employees.limit({where: "salary > 11000", number: 1, count: 3},(err, data)=> {if(err) {console.log(err)return;}res.send(data)})// res.send('orm') })


    補充:

    3.2、增加數據

    增加單條記錄, insert、對象參數、屬性就是列名

    app.get("/get_data", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let Stuinfo = db.model("stuinfo")Stuinfo.insert({ name: "zzep",age: 20,email: '910456@qq.com',gradeId: 2,sex: '男'}, (err, data) => {res.send(data)})// res.send('orm') })


    同時增加多個數據, insert、數組參數、元素為對象、屬性就是列名:

    app.get("/get_data", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let Stuinfo = db.model("stuinfo")let arr = [{ id: 6,name: "bob",age: 30,email: '91bob6@qq.com',gradeId: 2,sex: '男'},{id: 7,name: "tom",age: 28,email: '910tom56@qq.com',gradeId: 1,sex: '男'}]Stuinfo.insert(arr, (err, data) => {console.log(data)res.send('數據增加成功')})// res.send('orm') })

    3.3、刪除數據(物理刪除)

    按條件刪除記錄 delete、字符串參數

    app.get("/get_data", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let Stuinfo = db.model("stuinfo")Stuinfo.delete("id=7", (err, data) => {res.send(data)})// res.send('orm') })


    清空表里面所有內容 delete、無參數:

    app.get("/get_data", (req, res) => {// 查詢數據庫,返回到瀏覽器// 創建模型,需要操作哪個數據表let Stuinfo = db.model("stuinfo")Stuinfo.delete((err, data) => {res.send(data)})// res.send('orm') })

    3.4、修改數據

    修改所有學生name為小明 update、對象參數、屬性就是列名

    let Student = db.model("students"); Student.update({name:'小明'},(err,results)=>{console.log(results); });

    修改id為1的年齡為30 update、字符串參數1、對象參數2、屬性就是列名

    let Student = db.model("students"); Student.update('id=1',{age:30},(err,results)=>{res.send("修改成功"); });

    3.5、自定義執行sql語句

    上面的情況如果滿足不了需求,直接使用自定義執行sql語句的方式 sql、字符串參數

    let Student = db.model("students"); Student.sql('select * from students',(err,results)=>{res.send("執行成功"); });


    下一篇:完善獲取數據庫數據的寫法async+await版本

    總結

    以上是生活随笔為你收集整理的使用express搭建服务器获取MySQL数据库数据的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。