Saturday, 15 April 2017

Pushing a new object doesn't gets retuned in the callback

Here's what my schema currently looks like (only the related section):

let UserAccSchema = new Schema({
meta : {
accessControl: {
authTokens:[{
    issuedOn: {
        type: Date,
        default: Date.now()
    },
    expiresOn: {
        type: Date,
        default: Date.now() + 1728000000 //Defaults to 20-days
    },
    lastUsage: {
        type: Date,
        default: Date.now()
    },
    authAgent: {
        type: String,
        default: "default"
    }
}]}}
});

I want to push a new object in "meta/accessControl/authTokens". My current approach is:

UserAccSchema.methods.generateAuthToken = function (authAgent, cb) {
    console.info("MongoUser | Auth | Attempting to generate auth token for user | " + this._id);
    this.update({
        $push: {
            "meta.accessControl.authTokens": {
                authAgent: authAgent
            }
        }
    }, {safe: true, new: true}, function (err, obj) {
        if (err) {
            console.error("MongoUser | Auth | Error occurred while saving auth-token information | " + err);
            cb(new AppError("Auth token cannot be generated. Please try again.", AppError.ErrorCode.INTERNAL_SERVER_ERROR));
        } else {
            console.info("MongoUser | Auth | Auth token for user was generated | " + JSON.stringify(obj));
            cb(null, obj);
        }
    });
};

the above code is doing the job, but the problem that I'm having is when pushing the new object, the new object doesn't gets returned in:

function(err,obj) {

}

Instead returns this:

{"n":1,"nModified":1,"ok":1}

What I want to know:

  • Where Am I wrong?
  • Am I doing this the right way? Any other way to $push the obj?

Thank You



via AnkitNeo

No comments:

Post a Comment