如何解决 Mongoose v5.11.0 model.find() 错误:

如何解决 model.find() 函数产生“缓冲在...毫秒后超时”的问题?我正在使用 mongoose v 5.11.0、npm v6.14.8 和 mongodb v


这是代码。


var express = require('express');

var app = express();

var bodyParser = require('body-parser');

const assert = require('assert');


var mongoose = require('mongoose');


try {

    var db = mongoose.connect('mongodb://localhost:27017', {useNewUrlParser: true, dbName: 'swag-shop' });

    console.log('success connection');

}

catch (error) {

    console.log('Error connection: ' + error);

}



var Product = require('./model/product');

var WishList = require('./model/wishlist');


//Allow all requests from all domains & localhost

app.all('/*', function(req, res, next) {

  res.header("Access-Control-Allow-Origin", "*");

  res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Accept");

  res.header("Access-Control-Allow-Methods", "POST, GET");

  next();

});


app.get('/product', function(request, response) {


    Product.find({},function(err, products) {

        if (err) {

            response.status(500).send({error: "Could not fetch products. "+ err});

        } else {

            response.send(products);

        }

    });

});


app.listen(3004, function() {

    console.log("Swag Shop API running on port 3004...");

});

产品型号:


var mongoose = require('mongoose');

var Schema = mongoose.Schema;


var product = new Schema({

    title: String,

    price: Number,

    likes: {type: Number, default: 0}

});


module.exports = mongoose.model('Product', product);


慕森王
浏览 165回答 6
6回答

手掌心

根据此链接中找到的文档:https ://mongoosejs.com/docs/connections.html#bufferingMongoose 让您可以立即开始使用模型,而无需等待 mongoose 建立与 MongoDB 的连接。这是因为 mongoose 在内部缓冲模型函数调用。这种缓冲很方便,但也是造成混乱的常见原因。如果您在没有连接的情况下使用模型,Mongoose 默认情况下不会抛出任何错误。长话短说:在建立连接之前将调用您的模型。您需要将async/await与 connect() 或 createConnection() 一起使用;或使用.then(),因为这些函数现在从Mongoose 5返回 Promise 。

ITMISS

通过删除文件夹、文件并重新安装模块解决了model.find() error: Operation products.find() buffering timed out after 10000ms"该问题。node_module*.jsonmongoose按照此说明解决了警告问题https://mongoosejs.com/docs/deprecations.html

一只名叫tom的猫

嗯,我遇到了同样的问题并且有非常相似的代码。我在测试时发送 get 请求时遇到了同样的错误。最终,我找到了解决方案,即我的本地主机数据库当时没有运行。虽然这是一个愚蠢的错误,但我很难找到它。

慕妹3242003

对我来说是 100% MongoDB Atlas 问题。我在圣保罗创建了一个集群,但由于某种原因未能按预期工作。我已将其删除,并在 AWS/弗吉尼亚北部 (us-east-1) 创建一个新的,然后一切又开始工作。我正在使用这个函数连接到数据库并避免一些警告mongoose.connect(    url,    { useNewUrlParser: true, useUnifiedTopology: true },    function (err, res) {        try {            console.log('Connected to Database');        } catch (err) {            throw err;        }    });

aluckdog

只需使用127.0.0.1而不是localhostmongoose.connect('mongodb://127.0.0.1:27017/myapp');或者在 mongoose.connect 方法中使用 family:4mongoose.connect('mongodb://localhost:27017/TESTdb', {    family:4})    .then(() => {        console.log('FINE');    })    .catch(() => {        console.log("BAD");    })

弑天下

出现此错误是因为您在创建与数据库的连接之前尝试访问模型始终在 app.js 中链接您的 mongodbconnection 文件(如果您已创建) var mongoose = require('./mongoconnection');或者只是将 mongodb 连接代码保留在 app.js 中
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript