生活随笔
收集整理的這篇文章主要介紹了
使用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
;
};
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}`;};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}`;};connection
.query(str
, (error
, results
, fields
) => {callback(error
, results
, fields
);});return this;}};
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;
};
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
);});
}
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;};
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;
};
Model
.prototype
.sql = function (str
, callback
) {connection
.query(str
, (error
, results
, fields
) => {callback(error
, results
, fields
);});return this;
};
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
) {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
) {reject(err
);} else {resolve();}});});let p3
= new Promise((resolve
, reject
) => {connection
.query(`CREATE DATABASE ${options.database}`, (err
, results
, fields
) => {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
= {connect
: function ({ host
= 'localhost', port
= 3306, user
= '', password
= '', database
= 'og' }) {databaseName
= database
;options
= {host
,port
,user
,password
,database
};connection
= mysql
.createConnection(options
);},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(/,$/, '');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
)})
})
查詢指定字段(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
)})
})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
)})
})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
)})
})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
)})
})
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
)})
})app
.listen(3000, ()=> {console
.log("服務器已經啟動,端口為:3000")
})
分頁查詢(limit、對象參數 where\number\count):
app
.get("/get_data_limit", (req
, res
) => {let employees
= db
.model("employees")employees
.limit({where
: "salary > 11000", number
: 1, count
: 3},(err
, data
)=> {if(err
) {console
.log(err
)return;}res
.send(data
)})
})
補充:
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
)})
})
同時增加多個數據, 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('數據增加成功')})
})
3.3、刪除數據(物理刪除)
按條件刪除記錄 delete、字符串參數
app
.get("/get_data", (req
, res
) => {let Stuinfo
= db
.model("stuinfo")Stuinfo
.delete("id=7", (err
, data
) => {res
.send(data
)})
})
清空表里面所有內容 delete、無參數:
app
.get("/get_data", (req
, res
) => {let Stuinfo
= db
.model("stuinfo")Stuinfo
.delete((err
, data
) => {res
.send(data
)})
})
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数据库数据的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。