# 在node中使用mysql

## 总体思路

![](https://43423.oss-cn-beijing.aliyuncs.com/img/20190915204541.png)

### 1. 安装mysql包

`npm i mysql --save`

* 建一个数据库的配置文件

  ```javascript
  const mysql = require("mysql")

  const connection = mysql.createConnection({
      host: 'localhost',
      user: 'MysqlNode',
      password: '020311',
      database: 'MysqlNode'
  })

  module.exports = connection
  ```

  * 每个参数的含义

    | host               | 主机地址 （默认：localhost）                                                                |
    | ------------------ | ---------------------------------------------------------------------------------- |
    | user               | 用户名                                                                                |
    | password           | 密码                                                                                 |
    | port               | 端口号 （默认：3306）                                                                      |
    | database           | 数据库名                                                                               |
    | charset            | 连接字符集（默认：'UTF8\_GENERAL\_CI'，注意字符集的字母都要大写）                                         |
    | localAddress       | 此IP用于TCP连接（可选）                                                                     |
    | socketPath         | 连接到unix域路径，当使用 host 和 port 时会被忽略                                                   |
    | timezone           | 时区（默认：'local'）                                                                     |
    | connectTimeout     | 连接超时（默认：不限制；单位：毫秒）                                                                 |
    | stringifyObjects   | 是否序列化对象                                                                            |
    | typeCast           | 是否将列值转化为本地JavaScript类型值 （默认：true）                                                  |
    | queryFormat        | 自定义query语句格式化方法                                                                    |
    | supportBigNumbers  | 数据库支持bigint或decimal类型列时，需要设此option为true （默认：false）                                 |
    | bigNumberStrings   | supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回（默认：false） |
    | dateStrings        | 强制timestamp,datetime,data类型以字符串类型返回，而不是JavaScript Date类型（默认：false）                 |
    | debug              | 开启调试（默认：false）                                                                     |
    | multipleStatements | 是否许一个query中有多个MySQL语句 （默认：false）                                                   |
    | flags              | 用于修改连接标志                                                                           |
    | ssl                | 使用ssl参数（与crypto.createCredenitals参数格式一至）或一个包含ssl配置文件名称的字符串，目前只捆绑Amazon RDS的配置文件    |
* **2. 连接数据库**

  在app.js入口文件中进行数据库的连接

  ```javascript
  const mysql_conn = require(path.join(__dirname, "database/configure.js")) //加载数据库配置信息

  mysql_conn.connect(function(err, result) {
      if (err) {
          console.log("数据库连接失败！")
      }
      console.log("数据库连接成功！")
  })
  ```
* **3.封装对应的SQL语句数据处理函数**

  ```javascript
  const path = require("path")

  const mysql_conn = require(path.join(__dirname, "../configure.js"))

  exports.findAll = function(callback) {
      let sql = 'SELECT * FROM websites ';
      mysql_conn.query(sql, function(err, result) {
          if (err) {
              return callback(err)
          }
          return callback(null, result)
      })
  }
  ```
* **4.在路由文件中直接使用对应的函数**

  ```javascript
  const express = require("express")

  const path = require("path")

  const test_mysql = require(path.join(__dirname, "../database/include/test_mysql.js"))

  const router = express.Router()

  router.get("/test", function(req, rep, next) {
      test_mysql.findAll(function(err, result) {
          if (err) {
              return next(err)
          }
          rep.status(200).send(result)
      })
  })
  module.exports = router
  ```

  **:warning:路由的引入需要在数据库链接之后**
