我正在尝试为API返回一个端点,该API将返回给定用户的所有订单。我的问题是,当我尝试使用mongoose的findById函数查询数据库时,'user'对象在回调函数中是未定义的,我无法查询订单subdoc。为了增加混乱,如果我不使用回调函数,我可以让它工作,但是我没有正确的错误处理。
var mongoose = require('mongoose');
var router = express.Router();
var order_model = require('../models/order');
var user_model = require('../models/user');
router.get('/:userid/order/', function (req, res) {
// This works???
var u = user_model.findById(req.params.userid);
res.json(u.orders);
});
以下代码抛出错误“TypeError:无法读取未定义的属性'命令'。
var mongoose = require('mongoose');
var router = express.Router();
var order_model = require('../models/order');
var user_model = require('../models/user');
router.get('/:userid/order/', function (req, res) {
// This throws an error.
user_model.findById(req.params.userid).then(function (err, user) {
if (err) {
res.send(err);
}
res.json(user.orders);
});
});
user.js的
var mongoose = require('mongoose');
var ordersSchema = require('./order').schema;
var userSchema = new mongoose.Schema({
name: String,
email: String,
showroom: String,
orders: [ordersSchema]
});
module.exports = mongoose.model('User', userSchema);
order.js
var mongoose = require('mongoose');
var lineItemsSchema = require('./lineitem').schema;
var ordersSchema = new mongoose.Schema({
trackingNumber: Number,
lineItems: [lineItemsSchema]
});
module.exports = mongoose.model('Order', ordersSchema);
对此行为的任何帮助/解释将不胜感激。谢谢!
答案 0 :(得分:0)
then
回调的第一个参数是user
,而不是err
。
使用传统的回调:
user_model.findById(req.params.userid, function (err, user) {
if (err) {
res.send(err);
return; // Need to return here to not continue with non-error case
}
res.json(user.orders);
});
或者对承诺单独处理错误的catch
链接:
user_model.findById(req.params.userid).then(function (user) {
res.json(user.orders);
}).catch(function(err) {
res.send(err);
});
答案 1 :(得分:0)
我通常会这样查询,它完美无缺:
user_model.find(_id : req.params.userid)
.exec((err, user) => {
if(err){
//handle error
}
return res.status(200).json(user.orders);
})
});