最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Mongoose查找查询未执行

IT培训 admin 3浏览 0评论

Mongoose查找查询未执行

我试图从mongodb中获取一些数据。我能够从模型MyModel(在Server.js中定义)中获取详细信息。但是我无法在模型Skill(在Skill.js中定义)中执行find方法。

Server.js

  let express = require('express');
  let app = express();
  var config = require('./config/config');
  let bodyParser = require('body-parser');
  var mongoose = require('mongoose');
  var cors = require('cors')
  var path = require("path");
  let Skill = require('./app/models/Skill');
  const dbURI = config.dbURI;
  app.use(cors());
  app.use(bodyParser.json(true));
  mongoose.connect(dbURI, {useNewUrlParser: true});
  mongoose.connection.on('connected', function () {
         console.log("Connected");
  }); 
  var MyModel = mongoose.model('Test', new Schema({ name: String 
  }));
  Skill.findOne(function(error, result) { 
           console.log("1",error,result);
  });
  MyModel.findOne(function(error, result) { 
           console.log("2",error,result); 
  });
  app.listen(config.appPort,function () {
          console.log('App running on port :: "' + config.appPort.toString() + '"');

  });

app/models/Skill.js

 var mongoose = require('mongoose');

 var skillSchema = new mongoose.Schema({
       name: String,
       length: String,
 });

 var Skill = mongoose.model('Skill', skillSchema,'Skill');
 module.exports = Skill; 

Output

   App running on port :: "8080"
   Conneccted
   2 null { _id: 5c6678215c50a65e59fc6a89, name: 'test', __v: 0 }

我在创建架构时没有发现任何问题。有人可以帮我解决这个问题吗?

回答如下:

我目前无法测试我的建议,但我在您的代码中注意到的一件事是您查询,如

Skill.findOne(function(error, result) { 
       console.log("1",error,result);
});
MyModel.findOne(function(error, result) { 
        console.log("2",error,result); 
});

不会在“连接”回调中执行;可能这不是主要问题,但我会尝试更改代码如下:

mongoose.connection.on('connected', function () {
    console.log("Connected");
    Skill.findOne(function(error, result) { 
       console.log("1",error,result);
    });
    MyModel.findOne(function(error, result) { 
        console.log("2",error,result); 
    });
});

关键是每次调用(.on.findOne)都会启动一个promise,它封装了一个异步行为。我在,findOne调用之后放置.on调用,当你启动.findOne时你无法确定Mongoose的连接是否准备就绪...

Mongoose查找查询未执行

我试图从mongodb中获取一些数据。我能够从模型MyModel(在Server.js中定义)中获取详细信息。但是我无法在模型Skill(在Skill.js中定义)中执行find方法。

Server.js

  let express = require('express');
  let app = express();
  var config = require('./config/config');
  let bodyParser = require('body-parser');
  var mongoose = require('mongoose');
  var cors = require('cors')
  var path = require("path");
  let Skill = require('./app/models/Skill');
  const dbURI = config.dbURI;
  app.use(cors());
  app.use(bodyParser.json(true));
  mongoose.connect(dbURI, {useNewUrlParser: true});
  mongoose.connection.on('connected', function () {
         console.log("Connected");
  }); 
  var MyModel = mongoose.model('Test', new Schema({ name: String 
  }));
  Skill.findOne(function(error, result) { 
           console.log("1",error,result);
  });
  MyModel.findOne(function(error, result) { 
           console.log("2",error,result); 
  });
  app.listen(config.appPort,function () {
          console.log('App running on port :: "' + config.appPort.toString() + '"');

  });

app/models/Skill.js

 var mongoose = require('mongoose');

 var skillSchema = new mongoose.Schema({
       name: String,
       length: String,
 });

 var Skill = mongoose.model('Skill', skillSchema,'Skill');
 module.exports = Skill; 

Output

   App running on port :: "8080"
   Conneccted
   2 null { _id: 5c6678215c50a65e59fc6a89, name: 'test', __v: 0 }

我在创建架构时没有发现任何问题。有人可以帮我解决这个问题吗?

回答如下:

我目前无法测试我的建议,但我在您的代码中注意到的一件事是您查询,如

Skill.findOne(function(error, result) { 
       console.log("1",error,result);
});
MyModel.findOne(function(error, result) { 
        console.log("2",error,result); 
});

不会在“连接”回调中执行;可能这不是主要问题,但我会尝试更改代码如下:

mongoose.connection.on('connected', function () {
    console.log("Connected");
    Skill.findOne(function(error, result) { 
       console.log("1",error,result);
    });
    MyModel.findOne(function(error, result) { 
        console.log("2",error,result); 
    });
});

关键是每次调用(.on.findOne)都会启动一个promise,它封装了一个异步行为。我在,findOne调用之后放置.on调用,当你启动.findOne时你无法确定Mongoose的连接是否准备就绪...

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论