代码之家  ›  专栏  ›  技术社区  ›  Luiz Fernando Schrickte

Mongoose create on session验证失败

  •  0
  • Luiz Fernando Schrickte  · 技术社区  · 6 年前

    exports.campaign_totalize = async (campaign, start_date, end_date, now) => {
    
        var session = await mongoose.startSession();
        session.startTransaction();
    
        try {
        // ...
    
                let commission = await commissionModel.create({
                    datetime: Date.now(),
                    value: 10,
                    status: 'issued',
                    affiliate: affiliate_id,
                    campaign: campaign_id
                 }, { session: session });
    
        // ...
            }
    
        // ...
        } catch (err) {
            console.log("Error totalizing commissions:", err);
            await session.abortTransaction();
            session.endSession();
            throw err;
        }
    }
    

    在执行上面的代码时,所有字段都会出现ValidationError(即使确保它们都正常)。但是,如果我删除session参数,一切正常!集合确实存在。

    以下关于我的环境的信息:

    "dependencies": {
      "express": "^4.16.4",
      "mongoose": "^5.3.9",
      "mongoose-bcrypt": "^1.6.0",
      "validator": "^10.9.0"
    }
    
    $ node --version
    v10.14.0
    $ mongod --version
    db version (v3.6.3) -> v4.0.4
    

    非常感谢你。

    更新:

    更新2:

    Trace: error
        at Object.exports.campaign_totalize (/home/luiz/magalabs/magafilio/magafilio-server/logic/commission_calc.js:147:17)
        at process._tickCallback (internal/process/next_tick.js:68:7)
    Error totalizing commissions: { ValidationError: Commission validation failed: campaign: All commissions must be associated to a campaign, affiliate: All commissions must be associated to an affiliate, status: Commission needs a status associated, value: Commission needs a value - use 0 for no valued commissions, datetime: Commission needs date/time info
        at ValidationError.inspect (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validation.js:59:24)
        at formatValue (internal/util/inspect.js:453:31)
        at inspect (internal/util/inspect.js:193:10)
        at Object.formatWithOptions (util.js:165:18)
        at Console.(anonymous function) (console.js:188:15)
        at Console.log (console.js:199:31)
        at Object.exports.campaign_totalize (/home/luiz/magalabs/magafilio/magafilio-server/logic/commission_calc.js:148:17)
        at process._tickCallback (internal/process/next_tick.js:68:7)
      errors:
       { campaign:
          { ValidatorError: All commissions must be associated to a campaign
              at new ValidatorError (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validator.js:29:11)
              at validate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:844:13)
              at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:897:11
              at Array.forEach (<anonymous>)
              at ObjectId.SchemaType.doValidate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:853:19)
              at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/document.js:1893:9
              at process._tickCallback (internal/process/next_tick.js:61:11)
            message: 'All commissions must be associated to a campaign',
            name: 'ValidatorError',
            properties: [Object],
            kind: 'required',
            path: 'campaign',
            value: undefined,
            reason: undefined,
            [Symbol(mongoose:validatorError)]: true },
         affiliate:
          { ValidatorError: All commissions must be associated to an affiliate
              at new ValidatorError (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validator.js:29:11)
              at validate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:844:13)
              at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:897:11
              at Array.forEach (<anonymous>)
              at ObjectId.SchemaType.doValidate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:853:19)
              at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/document.js:1893:9
              at process._tickCallback (internal/process/next_tick.js:61:11)
            message: 'All commissions must be associated to an affiliate',
            name: 'ValidatorError',
            properties: [Object],
            kind: 'required',
            path: 'affiliate',
            value: undefined,
            reason: undefined,
            [Symbol(mongoose:validatorError)]: true },
         status:
          { ValidatorError: Commission needs a status associated
              at new ValidatorError (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validator.js:29:11)
              at validate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:844:13)
              at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:897:11
              at Array.forEach (<anonymous>)
              at SchemaString.SchemaType.doValidate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:853:19)
              at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/document.js:1893:9
              at process._tickCallback (internal/process/next_tick.js:61:11)
            message: 'Commission needs a status associated',
            name: 'ValidatorError',
            properties: [Object],
            kind: 'required',
            path: 'status',
            value: undefined,
            reason: undefined,
            [Symbol(mongoose:validatorError)]: true },
         value:
          { ValidatorError: Commission needs a value - use 0 for no valued commissions
              at new ValidatorError (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validator.js:29:11)
              at validate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:844:13)
              at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:897:11
              at Array.forEach (<anonymous>)
              at SchemaNumber.SchemaType.doValidate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:853:19)
              at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/document.js:1893:9
              at process._tickCallback (internal/process/next_tick.js:61:11)
            message: 'Commission needs a value - use 0 for no valued commissions',
            name: 'ValidatorError',
            properties: [Object],
            kind: 'required',
            path: 'value',
            value: undefined,
            reason: undefined,
            [Symbol(mongoose:validatorError)]: true },
         datetime:
          { ValidatorError: Commission needs date/time info
              at new ValidatorError (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validator.js:29:11)
              at validate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:844:13)
              at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:897:11
              at Array.forEach (<anonymous>)
              at SchemaDate.SchemaType.doValidate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:853:19)
              at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/document.js:1893:9
              at process._tickCallback (internal/process/next_tick.js:61:11)
            message: 'Commission needs date/time info',
            name: 'ValidatorError',
            properties: [Object],
            kind: 'required',
            path: 'datetime',
            value: undefined,
            reason: undefined,
            [Symbol(mongoose:validatorError)]: true } },
      _message: 'Commission validation failed',
      name: 'ValidationError' }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   cryosx    6 年前

    要指定选项,文档必须是数组,而不是排列。

    https://mongoosejs.com/docs/api.html#model_Model.create

    必须是这种形式

    Model.create([doc], options)
    

    你有

    Model.create(doc, options)
    

    let [commission] = await commissionModel.create([{datetime: Date.now(), 
    ...}], {session})
    
    let [commission] = await commissionModel.create([doc], options})