关于Node.js操作服务器中数据库的实践

84 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

1. 连接数据库

  • 前端页面
<h2>添加员工</h2>
<form method="post" action="/add">
    姓名:<input type="text" name="ename"><br>
    性别:<input type="text" name="sex"><br>
    生日:<input type="text" name="birthday"><br>
    工资:<input type="text" name="salary"><br>
    部门:<input type="text" name="deptId"><br>
    <input type="submit">
</form>

  • 后端代码
const express = require('express')
​
// 创建 web 服务器
const app = express()
​
// 设置端口
app.listen(8080)
​
// 托管静态资源到 public 目录
app.use(express.static('./public'))
​
// 使用中间键将 post 请求的数据解析为对象
app.use(express.urlencoded({
    extended: false
}))
​
// 添加路由(post / add)
app.post('/add', (req, res) => {
    // 获取 post 传递的数据
    console.log(req.body);
    res.send('员工添加成功')
})
  • 启动 node app.js ,运行之后在 cmd 面板即可看到返回的 object 对象格式的数据

2. 查看数据库的数据

  • 新建一个以 .js 为后缀的文件
// 引入 Mysql 模块
const mysql = require('mysql')
​
// 创建连接池对象
const db = mysql.createConnection({
    host: '192.168.xx.xx',
    user: 'root',
    password: 'xxx',
    database: 'db_library',
    connectionLimit: 15,     // 连接池的大小,默认也是15
})
​
// 执行 sql 命令, 自动建立连接
// 方法是异步的, 需要使用回调函数获取结果
db.query('select * from tb_reader', (err, result) => {
    // err: 可能产生的错误结果
    if (err) return console.log('连接失败,请重试')
    // result:成功的结果
    console.log(result)
});
  • xxx.js 的文件下, 通过 Node xxx.js 运行该文件; 以下是运行得到的数据,仅供参考。
E:\h5-001\node.js\danei>node 02_mysql.js
[
  RowDataPacket {
    reader_id: 1,
    reader_name: '张琳',
    age: 19,
    stu_no: 10001,
    account: 200
  },
  RowDataPacket {
    reader_id: 2,
    reader_name: '实时',
    age: 90,
    stu_no: 1006,
    account: 200
  },
  RowDataPacket {
    reader_id: 3,
    reader_name: '王五',
    age: 21,
    stu_no: 10003,
    account: 100
  },
  RowDataPacket {
    reader_id: 4,
    reader_name: '刘文',
    age: 24,
    stu_no: 1004,
    account: 300
  },
  RowDataPacket {
    reader_id: 5,
    reader_name: '张胜',
    age: 25,
    stu_no: 1005,
    account: 455
  }
]

3. 查询数据表 姓名 当中出现 '五' 的这个人

  • 练习:执行 SQL 命令, 查询出该员工的数据
// 得到了员工的姓名 -- 方法一(字符串拼接)
var user = '%五'
// 执行 sql 命令, 查询出该员工的数据
SELECT * FROM tb_reader WHERE reader_name like "%五" 
db.query('SELECT * FROM tb_reader WHERE reader_name like' + '"' + user + '"', (err, result) => {
    if (err) throw Error
    console.log(result)
})
  • 查询结果
E:\h5-001\node.js\danei>node 02_mysql.js
[
  RowDataPacket {
    reader_id: 3,
    reader_name: '王五',
    age: 21,
    stu_no: 10003,
    account: 100
  }
]


// 得到了员工的姓名 -- 方法二(模板字符串)
var user = '%五'
// 执行 sql 命令, 查询出该员工的数据
db.query(`SELECT * FROM tb_reader WHERE reader_name like "${user}"`, (err, result) => {
    if (err) throw Error
    console.log(result)
})
  • 查询结果
E:\h5-001\node.js\danei>node 02_mysql.js
[
  RowDataPacket {
    reader_id: 3,
    reader_name: '王五',
    age: 21,
    stu_no: 10003,
    account: 100
  }
]


// 得到了员工的姓名 -- 方法三(占位符)
// ? 是用来占位符,[user] 表示需要用来过滤的数据
var user = '%五'
db.query('select * from tb_reader WHERE reader_name like ?', [user], (err, result) => {
    if (err) throw Error
    console.log(result)
})
  • 查询结果
E:\h5-001\node.js\danei>node 02_mysql.js
[
  RowDataPacket {
    reader_id: 3,
    reader_name: '王五',
    age: 21,
    stu_no: 10003,
    account: 100
  }
]

4. 往数据表当中添加数据

  • 注意:设置 id 为自增
// 添加数据
var user = {
    reader_name: '舒服',
    age: '70',
    stu_no: '1009',
    account: '700'
}
db.query('INSERT  INTO tb_reader set ?', [user], (err, result) => {
    if (err) throw Error
    console.log(result)
})
  • 查询结果
PS E:\h5-001\node.js\danei> node .\02_mysql.js
OkPacket {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 11,
  serverStatus: 2,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0
}