猫鼬没有回复记录

时间:2018-02-02 02:08:24

标签: javascript mongoose mongoose-schema

好吧,昨晚我发布了一个问题,因为我对方法调用获得混合回报感到沮丧;我得到了一个有效的答案,但我感到困惑,因为这是我在问题发生前所做的事情。

这个问题在这里:javascript undefined, when I just logged it 正如你所知,我正在“关键”回来......它只是在一个物体和一系列物体之间波动。

今晚 - 我坐下来恢复,现在我甚至无法从“findKey”电话中取回KEY。 (从昨晚发行链上一步)。

目标是兑换优惠券。 用户将URL中的KEY传递给api,这将是 1)按键查找记录,返回id和用户ID(发给'Coupon'的人) 2)如果优惠券未被兑换,则会标记已重新兑换的优惠券 3)并与有问题的用户做其他事情。

我没有收到错误,但“KEY”始终未定义

mongoDB Atlas - mongooseJS 4.9.8 - 节点8.9.1 - 表达4.15.5 键是128个字符UID - 如果这对猫鼬有影响,我已经尝试了5个字符键并得到相同的'没有结果' 所以我认为这不是问题所在。

我在Mongo IDE中获得了一个结果。记录就在那里......

兑换优惠券的路线

router.get('/:_key', (req,res) => {

    CouponKey.findKey( req.params._key, (err, key) => { 

        if ( key !== undefined ) { // sadly this was working last night - 

            console.log( 'yea ---' + key );

        } else { // now this is all i get

            console.log('ha ha --- ' + req.params._key );

        }

    });

})

以上结果如下:

--- module.exports.findKey --- zzc6a
ha ha --- zzc6a

MODEL CouponKey

const CouponKeySchema = new Schema({
    key: {
        type: String
        ,required: true
    }
    ,type: {
        type: String
        ,required: true
    }
    ,user_id: {
        type: mongoose.Schema.ObjectId
        ,required: true
    }
    ,date: {
        issued: {
            type: Date
            ,default: Date.now
        }
        ,redeemed: {
            type: Date
            ,default: null
        }
    }
}, {collection:'coupons_keys',strict:false } );

const CouponKey = module.exports = mongoose.model('CouponKey', CouponKeySchema);

module.exports.findKey = function( key, callback ) {

    console.log('--- module.exports.findKey --- ' + key );

    const query = { key: key };
    CouponKey.find(query, callback);

}

我试过这个

const query = { key: key };
x = UserKey.find(query);
console.log(x);

输出是这个(我没有看到'返回记录')

Query {
  _mongooseOptions: {},
  mongooseCollection:
   NativeCollection {
     collection: Collection { s: [Object] },
     opts: { bufferCommands: true, capped: false },
     name: 'coupons_keys',
     collectionName: 'coupons_keys',
     conn:
      NativeConnection {
        ... },
     queue: [],
     buffer: false,
     emitter:
      EventEmitter {
        domain: null,
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined } },
  model:
   { [Function: model]
     hooks: Kareem { _pres: {}, _posts: {} },
     base:
      Mongoose {
        connections: [Array],
        plugins: [],
        models: [Object],
        modelSchemas: [Object],
        options: [Object] },
     modelName: 'CouponKey',
     model: [Function: model],
     db:
      NativeConnection {
        ... },
     discriminators: undefined,
     schema:
      Schema {
        obj: [Object],
        paths: [Object],
        subpaths: {},
        virtuals: [Object],
        singleNestedPaths: {},
        nested: [Object],
        inherits: {},
        callQueue: [Array],
        _indexes: [],
        methods: {},
        statics: {},
        tree: [Object],
        query: {},
        childSchemas: [],
        _plugins: [Object],
        s: [Object],
        options: [Object],
        '$globalPluginsApplied': true },
     collection:
      NativeCollection {
        collection: [Object],
        opts: [Object],
        name: 'coupons_keys',
        collectionName: 'coupons_keys',
        conn: [Object],
        queue: [],
        buffer: false,
        emitter: [Object] },
     Query: { [Function] base: [Object] },
     '$__insertMany': [Function],
     insertMany: [Function],
     setKey: [Function],
     findKey: [Function],
     findKeyByCouponId: [Function],
     redeem: [Function] },
  schema:
   Schema {
     obj:
      { key: [Object],
        type: [Object],
        coupon_id: [Object],
        date: [Object] },
     paths:
      { key: [Object],
        type: [Object],
        coupon_id: [Object],
        'date.issued': [Object],
        'date.redeemed': [Object],
        _id: [Object],
        __v: [Object] },
     subpaths: {},
     virtuals: { id: [Object] },
     singleNestedPaths: {},
     nested: { date: true },
     inherits: {},
     callQueue: [ [Array], [Array], [Array], [Array] ],
     _indexes: [],
     methods: {},
     statics: {},
     tree:
      { key: [Object],
        type: [Object],
        coupon_id: [Object],
        date: [Object],
        _id: [Object],
        id: [Object],
        __v: [Function: Number] },
     query: {},
     childSchemas: [],
     _plugins: { saveSubdocs: true, validateBeforeSave: true },
     s: { hooks: [Object], kareemHooks: [Object] },
     options:
      { collection: 'coupons_keys',
        retainKeyOrder: false,
        typeKey: 'type',
        id: true,
        noVirtualId: false,
        _id: true,
        noId: false,
        validateBeforeSave: true,
        read: null,
        shardKey: null,
        autoIndex: null,
        minimize: true,
        discriminatorKey: '__t',
        versionKey: '__v',
        capped: false,
        bufferCommands: true,
        strict: true,
        pluralization: true },
     '$globalPluginsApplied': true },
  op: 'find',
  options: { retainKeyOrder: false },
  _conditions:
   { key: 'qJ5qb...' },
  _fields: undefined,
  _update: undefined,
  _path: undefined,
  _distinct: undefined,
  _collection:
   NodeCollection {
     collection:
      NativeCollection {
        collection: [Object],
        opts: [Object],
        name: 'coupons_keys',
        collectionName: 'coupons_keys',
        conn: [Object],
        queue: [],
        buffer: false,
        emitter: [Object] },
     collectionName: 'coupons_keys' },
  _traceFunction: undefined,
  _castError: null,
  _count: [Function],
  _execUpdate: [Function],
  _find: [Function],
  _findOne: [Function],
  _findOneAndRemove: [Function],
  _findOneAndUpdate: [Function],
  _replaceOne: [Function],
  _updateMany: [Function],
  _updateOne: [Function] }

1 个答案:

答案 0 :(得分:1)

从您的代码中

 module.exports.findKey = function( key, callback ) {

    console.log('--- module.exports.findKey --- ' + key );

    const query = { key: key };
    CouponKey.find(query, callback);

}

函数find的结果始终是一个数组。因此,如果它没有任何结果,它将返回一个空数组[]。你的回调只检查它是否undefined,我认为你应该在检查之前记录键值,知道你得到了什么并检查错误。

CouponKey.findKey( req.params._key, (err, key) => { 
        console.log(err);
        console.log(key);

        if ( key !== undefined ) { // sadly this was working last night - 

            console.log( 'yea ---' + key );

        } else { // now this is all i get

            console.log('ha ha --- ' + req.params._key );

        }

    });

对于猫鼬而言,如果你只需要1条记录就可以使用函数findOne代替find,它会返回一个对象

关于代码打击

const query = { key: key };
x = UserKey.find(query);
console.log(x);

函数find返回一个mongoose Query而不是记录中的对象。如果您需要记录,则必须传递回调或使用承诺。