在回调函数中未定义MongooseJS对象

扎克

我正在尝试为API写一个端点,该端点将返回给定用户的所有订单。我的问题是,当我尝试使用mongoose的findById函数查询数据库时,在回调函数中未定义“用户”对象,因此无法查询订单子文档。更令人困惑的是,如果我不使用回调函数,则可以使其正常工作,但是这样我就没有适当的错误处理。

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:无法读取未定义的属性'orders'”。

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);

任何帮助/对此行为的解释将不胜感激。谢谢!

香港强尼

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);
});

或将呼叫链接到catchPromise以分别处理错误:

user_model.findById(req.params.userid).then(function (user) {
    res.json(user.orders);
}).catch(function(err) {
    res.send(err);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

对象回调函数是未定义的Javascript

$.getJSON 回调函数未定义

'this'在指令的回调中未定义

Ajax Handler回调函数:响应对象未定义

匿名函数在回调中给出“未定义不是函数”

为什么我的回调不是函数或未定义?

匿名回调函数内部的全局未定义

未定义API链接的回调函数

回调函数本身未定义

最终回调中的axios响应对象未定义

迭代全局对象的键尝试在异步回调中访问未定义的变量

在跨域ajax帖子的回调函数中未定义

局部变量在javascript的回调函数中变为未定义

将变量传递到回调函数中,但其状态为“未定义”

在异步函数中的回调参数上获取未定义的错误

React-native /// 回调不是函数。(在 'callback()' 中,'callback' 未定义)

d3.js 在回调函数点击事件中未定义的数据值

在回调中未定义注入器服务

在回调方法中未定义RequireJS依赖项

在async.waterfall方法中未定义的回调

TS-回调中未定义类方法

节点js中的“回调未定义”

“this”在wepay回调关闭器中返回未定义

为什么回调未定义?

Karma 回调始终未定义

Leaflet-marker click事件工作正常,但在回调函数中未定义类的方法

TypeError [ERR_INVALID_CALLBACK]:回调必须是一个函数。在Node.js中收到未定义

在异步函数内部,从回调函数返回值将返回Promise(未定义)

BreezeJS故障回调导致“未定义不是对象错误”异常