[英]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.