第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();
})();
预览: