Closed iraniamir closed 6 years ago
You may want to make an exception and not run your models through a transpiler like babel
.
Though I am curious how are you using the constructor without the new
keyword. Can you share example code that produces this error?
i exactly use aqua source, this is my code https://github.com/jedireza/aqua/blob/master/server/models/session.js
That's the model. However it sounds like how that model get's instantiated is the problem (not using a new
keyword.
Sharing a reproducible code snippet that I can run to get the same error would be most helpful.
'use strict';
const Async = require('async');
const Bcrypt = require('bcrypt');
const Joi = require('joi');
const MongoModels = require('mongo-models');
const Uuid = require('uuid');
class Session extends MongoModels {
static generateKeyHash(callback) {
const key = Uuid.v4();
Async.auto({
salt: function (done) {
Bcrypt.genSalt(10, done);
},
hash: ['salt', function (results, done) {
Bcrypt.hash(key, results.salt, done);
}]
}, (err, results) => {
if (err) {
return callback(err);
}
callback(null, {
key,
hash: results.hash
});
});
}
static create(userId, callback) {
const self = this;
Async.auto({
keyHash: this.generateKeyHash.bind(this),
newSession: ['keyHash', function (results, done) {
const document = {
userId,
key: results.keyHash.hash,
time: new Date()
};
self.insertOne(document, done);
}],
clean: ['newSession', function (results, done) {
const query = {
userId,
key: { $ne: results.keyHash.hash }
};
self.deleteOne(query, done);
}]
}, (err, results) => {
if (err) {
return callback(err);
}
results.newSession[0].key = results.keyHash.key;
callback(null, results.newSession[0]);
});
}
static findByCredentials(id, key, callback) {
const self = this;
Async.auto({
session: function (done) {
self.findById(id, done);
},
keyMatch: ['session', function (results, done) {
if (!results.session) {
return done(null, false);
}
const source = results.session.key;
Bcrypt.compare(key, source, done);
}]
}, (err, results) => {
if (err) {
return callback(err);
}
if (results.keyMatch) {
return callback(null, results.session);
}
callback();
});
}
}
Session.collection = 'sessions';
Session.schema = Joi.object({
_id: Joi.object(),
userId: Joi.string(),
key: Joi.string(),
time: Joi.date()
});
Session.constructWithSchema = true;
Session.indexes = [
{ key: { userId: 1 } }
];
module.exports = Session;
This isn't a reproducible code example, just the code that you linked to. At this point I'm unable to help since I don't have enough information to work with. I'd also venture to say that you shouldn't need to transpile your model code since it's not intended for the browser.
if we use babel we got this error : (i convert this class to es5 and works, i think you missed something)