第二节:使用Mongoose连接数据库

Mongoose 数据库介绍及安装指南

一、Mongoose 简介

Mongoose 是一个基于 Node.js 的 MongoDB 对象模型工具,它提供了一种更直观的方式来操作 MongoDB 数据库。通过 Mongoose,开发者可以使用面向对象的方式定义数据模型、进行数据验证和建立数据关联。

MongoDB 是一个基于分布式文件存储的 NoSQL 数据库,以其高性能、高可用性和易扩展性而著称。官方地址:www.mongodb.com/

二、MongoDB 安装与配置

下载安装

  1. 获取安装包

    访问官方下载地址:www.mongodb.com/try/downloa...

    建议选择 zip 格式,通用性更强

  2. 安装步骤

    • 将压缩包解压到 C:\Program Files 目录
    • 创建数据存储目录:C:\data\db(MongoDB 默认使用此路径存储数据)
    • 进入 MongoDB 的 bin 目录,打开命令行工具
    • 运行命令启动服务:mongod
  3. 验证启动 当命令行显示 waiting for connections 时,表示 MongoDB 服务已成功启动

  1. 连接数据库 在新命令行窗口中运行 mongo 命令即可连接本地 MongoDB 服务

使用建议

  • 环境变量配置 :将 MongoDB 的 bin 目录添加到系统环境变量 Path 中,方便全局使用 mongod 命令
  • 操作注意:请勿选中服务端窗口内容,否则会导致服务暂停。如需取消选中,可按回车键

三、Mongoose 连接配置

1. 安装 Mongoose

bash 复制代码
npm install mongoose

2. 创建配置文件

在项目根目录下创建 config 文件夹,并添加 index.js 配置文件:

javascript 复制代码
// 数据库配置参数
module.exports = {
  DBHOST: '127.0.0.1',     // 数据库主机地址
  DBPORT: 27017,           // 数据库端口
  DBNAME: 'node-ruoyi'     // 数据库名称
}

3. 创建数据库连接模块

db 文件夹下创建 db.js 文件:

javascript 复制代码
// 数据库连接模块
module.exports = function(success, error) {
  // 错误回调函数默认处理
  if (typeof error !== 'function') {
    error = () => {
      console.log('数据库连接失败')
    }
  }
  
  const mongoose = require('mongoose')
  const { DBHOST, DBPORT, DBNAME } = require('../config')
  
  // 启用严格查询模式
  mongoose.set('strictQuery', true)
  
  // 建立数据库连接
  mongoose.connect(`mongodb://${DBHOST}:${DBPORT}/${DBNAME}`)
  
  // 连接成功回调
  mongoose.connection.once('open', () => {
    console.log('MongoDB 连接成功')
    success()
  })
  
  // 连接错误回调
  mongoose.connection.on('error', () => {
    console.log('MongoDB 连接出错')
    error?.()
  })
  
  // 连接关闭回调
  mongoose.connection.on('close', () => {
    console.log('MongoDB 连接已关闭')
  })
}

4. 修改应用入口文件

更新 bin/www 文件,确保数据库连接成功后再启动服务器:

javascript 复制代码
#!/usr/bin/env node

/**
 * 模块依赖
 */
const db = require('../db/db')

// 先建立数据库连接,成功后启动应用
db(() => {
  var app = require('../app')
  var debug = require('debug')('back:server')
  var http = require('http')
  
  /**
   * 从环境变量获取端口号
   */
  var port = normalizePort(process.env.PORT || '3000')
  app.set('port', port)
  
  /**
   * 创建 HTTP 服务器
   */
  var server = http.createServer(app)
  
  /**
   * 监听指定端口
   */
  server.listen(port)
  server.on('error', onError)
  server.on('listening', onListening)
  
  /**
   * 端口号标准化函数
   */
  function normalizePort(val) {
    var port = parseInt(val, 10)
    
    if (isNaN(port)) {
      // 命名管道
      return val
    }
    
    if (port >= 0) {
      // 端口号
      return port
    }
    
    return false
  }
  
  /**
   * HTTP 服务器错误处理
   */
  function onError(error) {
    if (error.syscall !== 'listen') {
      throw error
    }
    
    var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port
    
    // 处理特定监听错误
    switch (error.code) {
      case 'EACCES':
        console.error(bind + ' 需要提升的权限')
        process.exit(1)
        break
      case 'EADDRINUSE':
        console.error(bind + ' 端口已被占用')
        process.exit(1)
        break
      default:
        throw error
    }
  }
  
  /**
   * HTTP 服务器监听事件
   */
  function onListening() {
    var addr = server.address()
    var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port
    debug('正在监听 ' + bind)
    console.log(`服务器已启动,监听端口: ${port}`)
  }
})

5. 重启应用服务

bash 复制代码
npm start

总结

通过以上配置,您的 Node.js 应用已经成功集成了 Mongoose 和 MongoDB 数据库。这种配置方式具有以下优势:

  1. 模块化设计:将数据库配置与业务逻辑分离,便于维护
  2. 错误处理完善:包含连接成功、失败和关闭的完整回调机制
  3. 启动顺序优化:确保数据库连接成功后再启动 HTTP 服务
  4. 配置灵活:通过配置文件轻松调整数据库连接参数

现在您的应用已经具备了数据库操作能力,可以开始定义数据模型和进行数据操作了。

相关推荐
万岳科技系统开发2 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
冉冰学姐2 小时前
SSM智慧社区管理系统jby69(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·管理系统·智慧社区·ssm 框架
杨超越luckly2 小时前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
Elastic 中国社区官方博客2 小时前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.2 小时前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐2 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
啦啦啦_99992 小时前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学3 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.3 小时前
Mysql
数据库·mysql
全栈前端老曹3 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集