进入对应的目录安装插件mysql
npm i --save mysql
连接数据库
createPool 创建连接池
在开发web应用程序时,连接池是一个很重要的概念。建立一个数据库连接所消耗的性能成本是很高的。在服务器应用程序中,如果为每一个接收到的客户端请求都建立一个或多个数据库连接,将严重降低应用程序性能。
因此在服务器应用程序中通常需要为多个数据库连接创建并维护一个连接池,当连接不再需要时,这些连接可以缓存在连接池中,当接收到下一个客户端请求时,从连接池中取出连接并重新利用,而不需要再重新建立连接。
*/
NodeJS的Promise的用法
Javascript的特点是异步,Javascript不能等待,如果你实现某件需要等待的事情,你不能停在那里一直等待结果回来,相反,底线是使用回调callback:你定义一个函数,这个函数只有等到结果可用时才能被调用。
这种回调模型对于好的代码组织是没有问题的,但是也可以通过从原始回调切换到promise解决很多问题,将promise看成是一个标准的数据容器,这样会简化你的代码组织,可以成为基于promise的架构。
*/
// 引用mysql模块
const mysql = require('mysql')
// 创建连接池,提高程序性能
const pool = mysql.createPool({
// 根据需要设置最大连接数,减少资源浪费
connectionLimit:10,
host:'localhost',
user:'root',
password:'root',
// 端口号默认是3306,可以省略
port:'3306',
database:'cys_student'
})
const query = (sql) => {
// 返回一个new出来的Promise架构
return new Promise((resolve,reject) =>{
pool.getConnection((err,connection) => {
// 如果连接失败,则不再往下执行,throw相当于js中的return
if(err){
reject(err)
throw(err)
}
connection.query(sql,(error,results) =>{
connection.release()
// 如果执行sql语句失败,则不再往下执行
if(error){
reject(error)
throw(error)
}
resolve(results)
})
})
})
}
// 将该自定义模块抛出,在需要的代码中引入
module.exports = query
- 创建API接口 ```javascript // 引入上面创建的连接数据库模块 const query = require(“./query.js”)
// 直接抛出函数 module.exports = (router) =>{ /* 需要定义四个接口
1. 获取全部信息接口
GET /names
2. 存储到数据库信息接口
POST /names
3. 更新数据库信息接口
PATCH /names:/id
4. 删除数据库信息接口
DELETE /names:/id
*/
// 定义获取全部信息接口 router.get(‘/names’,(req,res,next)=>{ // 定义sql语句 const _sql = ‘select * from students’; 执行_sql语句,成功时返回json数据 query(_sql).then((data) => { res.json(data) }) })
// 定义存储数据接口
router.post(‘/names’,(req,res,next) => {
// 接收post发送的数据时,用第一个参数的body属性查看
const name = req.body.name
// 查询数据库,看是否存在该数据
query(select * from students where name = "${name}"
).then(data=>{
// 如果存在,返回该”用户名已存在”
if(data.length){
res.json({
code:2,
msg:”用户名已存在”
})
}else{
// 如果不存在,将数据插入到数据库
const _sql = insert into students set name ="${name}"
if(name){
return query(_sql)
}
}
}).then(data => {
// 插入数据成功时,返回”插入成功”
res.json({
code:0,
msg:”插入成功”,
id:data.insertId,
name
})
}).catch(()=>{
// 插入数据失败时,返回”插入失败”
res.json({
code:1,
msg:”插入失败”
})
})
})
// 定义更新数据库接口
router.patch(‘/names/:id’,(req,res,next) =>{
// 以post、patch、delete方式发送的数据,id值通过第一个参数的params属性获取
const id = req.params.id
const name = req.body.name
// 定义mysql执行语句
const _sql = update students set name = "${name}" where id = "${id}"
;
query(_sql).then(data => {
// 如果执行成功,返回相应的id和name
res.json({
id,
name
})
}).catch(() => {
// 如果执行失败,返回"更新失败"
res.json({
msg:"更新失败"
})
})
})
// 定义删除数据库数据接口 router.delete(‘/names/:id’,(req,res,next) => { // 获取id const id = req.params.id
// 设置执行语句
const _sql = `delete from students where id = "${id}"`;
query(_sql).then(data=>{
res.json({
msg:"删除成功"
})
})
}) }
```