Skip to content
Netflix - 每月低至 25 元

第3章 数据库

MySQL

连接配置

js
// 新建 conf/db.js 文件
const env = process.env.NODE_ENV; // 环境参数

// 配置
let MYSQL_CONF;

// 开发环境
if (env === 'dev') {
  // mysql
  MYSQL_CONF = {
    host: 'localhost',
    user: 'root',
    password: '',
    port: '3306',
    database: 'myblog'
  };
}

// 测试环境
if (env === 'production') {
  // redis
  REDIS_CONF = {
    port: 6379,
    host: '127.0.0.1'
  };
}

module.exports = { REDIS_CONF };

建立连接

js
// 1.导入mysql模块与配置
const mysql = require('mysql');
const { MYSQL_CONF } = require('../conf/db');

// 2.建立与MySQL数据库的连接关系
const con = mysql.createConnection(MYSQL_CONF);
con.connect();

// 3. 封装执行 sql 语句的函数
function exec(sql) {
  const promise = new Promise((resolve, reject) => {
    con.query(sql, (err, result) => {
      if (err) {
        reject(err);
        return;
      }
      resolve(result);
    });
  });
  return promise;
}

module.exports = { exec };

Redis

连接配置

js
// 新建 conf/db.js 文件
const env = process.env.NODE_ENV; // 环境参数

// 配置
let REDIS_CONF;

// 开发环境
if (env === 'dev') {
  // redis
  REDIS_CONF = {
    port: 6379,
    host: '127.0.0.1'
  };
}

// 测试环境
if (env === 'production') {
  // redis
  REDIS_CONF = {
    port: 6379,
    host: '127.0.0.1'
  };
}

module.exports = { REDIS_CONF };

建立连接

js
// 1. 导入redis模块与配置
const redis = require('redis');
const { REDIS_CONF } = require('../conf/db');

// 2. 建立与Redis的连接关系
const redisClient = redis.createClient(REDIS_CONF.port, REDIS_CONF.host);

// 3. error时进行打印
redisClient.on('error', (err) => {
  console.error(err);
});

// 4. 设置 key-value
function set(key, val) {
  if (typeof val === 'object') {
    val = JSON.stringify(val);
  }
  redisClient.set(key, val, redis.print);
}

// 5. 获取 key-value
function get(key) {
  const promise = new Promise((resolve, rejcet) => {
    redisClient.get(key, (err, val) => {
      if (err) {
        rejcet(err);
        return;
      }
      if (val === null) {
        resolve(null);
        return;
      }
      try {
        resolve(JSON.parse(val));
      } catch (error) {
        resolve(val);
      }
    });
  });

  return promise;
}

module.exports = { get, set };

MongoDB

建立连接

js
// 1. 导入MongoClient
const MongoClient = require('mongodb').MongoClient;

// 2. 填写 url 与 dbname
const url = 'mongodb://localhost:27017';
const dbName = 'myblog';

MongoClient.connect(
  url,
  {
    // 配置
  },
  (err, client) => {
    if (err) {
      console.error('mongodb connect error');
      return;
    }

    // 3. 切换到数据库(控制台 `use myblog`)
    const db = client.db(dbName);

    // 4. 使用集合
    const usersCollection = db.collection('users');
  }
);

常用操作

js
// 1. 全部查询
usersCollection.find().toArray((err, result) => {
  if (err) {
    console.error('users find error', err);
    return;
  }
  console.log(result);
  // 关闭连接
  client.close();
});

// 2. 条件查询
usersCollection.find({ username: 'zhangsan', password: '123' }).toArray((err, result) => {
  if (err) {
    console.error('users find error', err);
    return;
  }
  console.log(result);
  // 关闭连接
  client.close();
});

// 3. 插入
usersCollection.insertOne(
  {
    username: 'lisi',
    password: 'abc',
    realname: '李四'
  },
  (err, result) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log(result);
    // 关闭连接
    client.close();
  }
);

// 4. 更新
usersCollection.updateOne(
  { username: 'zhangsan' }, // 查询条件
  {
    $set: { username: 'zhangsanA' }
  },
  (err, result) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log(result);
    // 关闭连接
    client.close();
  }
);

// 5. 删除
usersCollection.deleteOne(
  { username: 'zhangsan' }, // 删除条件,
  (err, result) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log(result);
    // 关闭连接
    client.close();
  }
)

Mongoose

建立连接

js
// db.js
const moongoose = require('mongoose');

const url = 'mongodb://localhost:27017';
const dbName = 'myblog';

moongoose.connect(`${url}/${dbName}`, {
  // 配置
});

const db = moongoose.connection;

// 发生错误
db.on('error', (err) => {
  console.error(err);
});

module.exports = moongoose

Schema/Model

js
// models/User.js
const moogoose = require('./db');

// 1. Schema 定义数据格式
const UserSchema = moogoose.Schema({
  username: {
    type: String,
    required: true, // 必须
    unique: true // 唯一
  },
  password: String,
  realname: String
});

// 2. 以 Model 规范 Collection
// Model 对应 Collection
const User = moogoose.model('user', UserSchema);  // 单数形式

module.exports = User;

使用

js
const User = require('./models/User');

!(async () => {
  // 创建用户
  const lisi = await User.create({
    username: 'lisi',
    password: '123',
    realname: '李四'
  });

  // 查询
  const users = await User.find();
})();
关注微信公众号搬瓦工 - 美国 CN2 优化线路
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0

预览:

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3