# 在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:路由的引入需要在数据库链接之后**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://zpliu.gitbook.io/booknote/node/mysql/01-qi-bu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
