簡體   English   中英

貓鼬:查找語句未執行

[英]Mongoose: find statement not executing

輸入該路由器的get函數,將log語句打印到控制台,但是find語句似乎沒有執行。 有明顯的原因嗎?

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');

const Product = require('../models/product');

module.exports = router;

const url = "mongodb://xxxx@ds027425.mlab.com:xxxx/xxxx";

mongoose.Promise = global.Promise;
mongoose.createConnection(url, function(err) {
    if(err) {
        console.log('Error!!!' + err);
    } else {
        console.log('Connected to Database!');
    }
});

router.get('/product/specialvalue', function(req, res) {
    console.log('Get specialvalue called xxxx');

    Product.find({'special_value': true})
    .sort({'price': 1}) 
    .exec(function(err, products) {
        if(err) {
            console.error('Error retrieving special value products!');
            res.json(err);  
        } else {
            console.log("products = " + JSON.stringify(products));
           res.json(products);        
        }
    });

});

這是貓鼬模型:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const ProductSchema = new Schema({
  producttype: String,
  name: String,
  brand: String,
  model: String,
  price: Number,
  list_price: Number,
  description: String,
  rating: Number,

模型的延續:(系統迫使我添加更多細節)

  item_no: String,
  special_value: Boolean,
  warranty: String,
  feature: [String],
  image: [String],

模型的延續:

  specification: {
    lowes_exclusive : Boolean,
    color : String,
    high_efficiency : Boolean,
    automatic_load_balancing : Boolean,
    product_capacity : String,
    large_items_cycle : Boolean,

模型的延續:

        exclusive_cycle : String,
        maximum_spin_speed : String,
        water_levels : String,
        number_of_rinse_cycles : String
      }
    });

模型的延續:

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

您的問題在於如何連接數據庫。 mongoose.createConnection()將連接對象返回到數據庫,但未將其設置為貓鼬的默認連接。 查找查詢未執行的原因是,Mongoose將所有數據庫調用排隊,並在處理它們之前等待打開的連接,而不是在沒有連接時引發錯誤。 使用mongoose.connect()將解決您的問題。 您可以在這里http://mongoosejs.com/docs/api.html#index_Mongoose-connect閱讀

有一些當你使用的不是.connect .createConnection差異。

這是有效的重構代碼:

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const url = "mongodb://xxxx@ds027425.mlab.com:xxxx/xxxx";
const Schema = mongoose.Schema;

mongoose.Promise = global.Promise;


const db = mongoose.createConnection(url, function(err) {
    if(err) {
        console.log('Error!!!' + err);
    } else {
        console.log('Connected to Database!');
    }
});

const ProductSchema = new Schema({
    producttype: String,
    name: String,
    brand: String,
    model: String,
    ...
    }
});

const Product = db.model('Product', ProductSchema);

router.get('/product/specialvalue', function(req, res) {
    console.log('Get specialvalue called xxxx');
    Product.find({'special_value': true})
        .sort({'price': 1})
        .exec(function(err, products) {
            if(err) {
                console.error('Error retrieving special value products!');
                res.json(err);
            } else {
                console.log("products = " + JSON.stringify(products));
                res.json(products);
            }
        });

 });

查看這篇文章 ,以獲取有關如何使用.createConnection的很好的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM