feng xiaohan

Node(Express)连接数据库

MySQL

关系型数据库

使用 mysql 的 connection 连接数据库

准备工作跟下一章节相同。

我们可以使用它来进行查询,查询完成之后会关闭连接。

这种方法较为底层,且每次操作数据库都需要新建数据库连接,若数据库操作需求多,对服务器消耗较大,因此,可以使用第二种连接方式。

const mysql = require("mysql");
const connection = mysql.createConnection({
  host: "localhost",
  user: "me",
  password: "secret",
  database: "my_db",
});

connection.connect();

connection.query("SELECT 1 + 1 AS solution", function (err, rows, fields) {
  if (err) throw err;

  console.log("The solution is: ", rows[0].solution);
});

connection.end();

使用 mysql 建立数据库连接池连接数据库

准备工作

  • 需要下载 MySQL 数据库在电脑上;

  • 项目中下载 mysql2 来辅助连接 MySQL 数据库:

    npm install --save mysql2
    

    mysql2 就是 mysql 的升级版。

连接数据库

以连接池的方式连接数据库:

database.js

const mysql = require("mysql2"); // 导入mysql2模块

// 创建一个连接池 @1
const pool = mysql.createPool({
  host: "localhost", // 连接的服务器的IP地址
  user: "root", // 数据库用户
  database: "node-complete", // 连接的具体数据库
  password: "159638", // 安装时填写的密码
});

// 导出连接池
module.exports = pool.promise(); // @2

@1:连接池方式——每当我们运行一个查询语句时能随时访问它,然后从管理的多个连接池中获取一个新连接,这样就可以同时运行多个查询,因为每个查询都需要自己的连接,并且一次查询完成后连接会交还到连接池中用于新的查询,最后在应用程序关闭时完成连接池。

@2:以 Promise 的方式导出,我们在其他地方使用的时候可以处理异步任务。

获取数据

我们要获取数据库表中的数据,需要使用execute()结合一条数据库语句来实现对数据库中表的操作:

app.js

const db = require('./util/database');
...
// 查询数据库中的products表
db.execute('SELECT * FROM products')
    .then(([rows, fieldData]) => {
        console.log(rows); // 存储了数据库表中的数据
        console.log(fieldData); // 存储数据库表的一些元字段
    })
    .catch(err => console.log(err));

// 增加一条数据
db.execute(
    'INSERT INTO products (title, price, imageUrl, description) VALUES (?, ?, ?, ?)',
    [this.title, this.price, this.imageUrl, this.description] // 增加数据字段(与库中的表相对应)
).then(() => {}).catch(err => console.log(err));

使用 sequelize 连接数据库

详情见 sequelize 一章。

MongDB

非关系型数据库。MongoDB 是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的 bson格式,因此可以存储比较复杂的数据类型。

特点:

  • 能存储大量的数据;
  • 支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,查询速度块;
  • 而且还支持对数据建立索引;

使用 mongodb 连接数据库

准备工作

下载 mongodb:

npm instal --save mongodb

准备一个 MongoDB 数据库连接地址,我使用的是云数据库 MongoDB Atlas。

连接数据库

database.js

const mongodb = require("mongodb"); // 引入mongodb
const MongoClient = mongodb.MongoClient; // 新建一个MongoClient用于连接数据库

const mongoConnect = (callback) => {
  MongoClient.connect(
    // 连接数据库地址
    "mongodb+srv://<user>:<password>@cluster0.mnle1m2.mongodb.net/?retryWrites=true&w=majority"
  ) // @1
    .then((client) => {
      console.log("Connected!");
      callback(client);
    })
    .catch((err) => {
      console.log(err);
    });
};

module.exports = mongoConnect;

@1:该 url 是云数据库的地址,其中包含了云数据库存储的用户名和密码。

app.js

const mongoConnect = require('./util/database');
const app = express();
...
mongoConnect(client => {
  console.log(client);
  app.listen(3000);
});

更多详细信息见 MongoDB 一章。

使用 mongoose 连接数据库

准备工作

下载 mongoose:

npm install --save mongoose

连接数据库

app.js

const mongoose = require('mongoose'); // 引入mongoose
...
mongoose
  .connect(
    'mongodb+srv://<user>:<password>@cluster0.mnle1m2.mongodb.net/shop?retryWrites=true&w=majority'
  ) // 连接MongoDB数据库
  .then(result => {
    app.listen(3000);
  })
  .catch(err => {
    console.log(err);
  });