Nodejs express mongoose中db.once('open')进入不了流程。

Nodejs express mongoose中db.once(‘open’)进入不了流程。

//分类module
console.log(‘a’)
db.once(‘open’,function(){
console.log(‘b’)
var cat = mongoose.Schema({
name:String,
fid:Number,
parentid:Number,
type:String
})

可以打印出’a’但是就是死活打印不了’b’。没有进入db.once(‘open’,funciton(){})回调函数里面,求解啊?


3 回复

当在使用 Node.js、Express 和 Mongoose 进行数据库连接时,如果 db.once('open', function() { ... }) 没有触发,可能是因为数据库连接还没有成功建立。这通常发生在数据库服务未启动或者配置错误的情况下。

下面是一个完整的示例,展示了如何正确设置 Mongoose 并监听数据库连接事件:

示例代码

const express = require('express');
const mongoose = require('mongoose');

// 初始化 Express 应用
const app = express();

// 数据库连接字符串(根据实际情况修改)
const dbURI = 'mongodb://localhost:27017/your_database_name';

// 连接 MongoDB 数据库
mongoose.connect(dbURI, {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

// 监听数据库连接事件
mongoose.connection.on('connecting', () => {
    console.log('正在连接到数据库...');
});

mongoose.connection.on('connected', () => {
    console.log('已连接到数据库');
});

mongoose.connection.on('error', (err) => {
    console.error('数据库连接错误:', err);
});

mongoose.connection.on('disconnected', () => {
    console.log('数据库已断开连接');
});

// 分类 Schema
const catSchema = new mongoose.Schema({
    name: String,
    fid: Number,
    parentid: Number,
    type: String
});

// 创建 Model
const Cat = mongoose.model('Cat', catSchema);

// 启动 Express 服务器
app.listen(3000, () => {
    console.log('服务器运行在 http://localhost:3000');
});

解释

  1. 初始化 Express 应用

    const app = express();
    
  2. 连接数据库

    mongoose.connect(dbURI, {
        useNewUrlParser: true,
        useUnifiedTopology: true
    });
    

    使用 useNewUrlParseruseUnifiedTopology 是为了确保兼容性和安全性。

  3. 监听数据库连接事件

    • connecting:当开始尝试连接数据库时触发。
    • connected:当成功连接数据库后触发。
    • error:如果连接过程中发生错误,会触发此事件。
    • disconnected:当数据库连接断开时触发。
  4. 定义 Schema 和 Model

    const catSchema = new mongoose.Schema({
        name: String,
        fid: Number,
        parentid: Number,
        type: String
    });
    
    const Cat = mongoose.model('Cat', catSchema);
    
  5. 启动 Express 服务器

    app.listen(3000, () => {
        console.log('服务器运行在 http://localhost:3000');
    });
    

通过这种方式,你可以更好地监控数据库连接的状态,并且能够更容易地找到问题所在。如果数据库连接出现问题,错误信息会在控制台输出,便于调试。


这个是post请求

根据你的描述,db.once('open', function() { ... }) 回调函数没有被触发,可能是因为数据库连接尚未成功建立。你可以尝试以下方法来排查问题:

  1. 检查数据库连接字符串:确保 mongoose.connect() 中的连接字符串是正确的。
  2. 错误处理:增加对连接错误的监听,以便了解是否有错误发生。

示例代码如下:

const mongoose = require('mongoose');

console.log('a');

mongoose.connect('mongodb://localhost:27017/yourdbname', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

const db = mongoose.connection;

// 监听错误事件
db.on('error', (err) => {
    console.error('Connection error:', err);
});

db.once('open', function () {
    console.log('b');
    var catSchema = new mongoose.Schema({
        name: String,
        fid: Number,
        parentid: Number,
        type: String
    });
    
    // 可以在这里定义模型
    const Cat = mongoose.model('Cat', catSchema);
});

在这个示例中:

  • mongoose.connect() 方法用于连接数据库。
  • db.on('error', ...) 用来捕获连接错误。
  • db.once('open', ...) 用来处理数据库连接成功的逻辑。

如果 db.on('error', ...) 中输出了错误信息,那么可以根据错误信息进行相应的调试。

回到顶部