Mongoose: рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдЬреБрд▓ре░ 2016  ┬╖  79рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Automattic/mongoose

рдореБрдЭреЗ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓ рд░рд╣реА рд╣реИ

(node:3341) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html

рдореИрдВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж

driver.createCar({
          carName: 'jeep',
          availableSeats: 4,
        }, callback);

рдбреНрд░рд╛рдЗрд╡рд░ рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ

const carSchema = new Schema({
  carName: String,
  availableSeats: Number,
  createdOn: { type: Date, default: Date.now },
});
const driverSchema = new Schema({
  email: String,
  name: String,
  city: String,
  phoneNumber: String,
  cars: [carSchema],
  userId: {
    type: Schema.Types.ObjectId,
    required: true,
  },
  createdOn: { type: Date, default: Date.now },
});
const DriverModel = mongoose.model('Driver', driverSchema);

class Driver extends DriverModel {
  getCurrentDate() {
    return moment().format();
  }
  create(cb) {
    // save driver
    this.createdOn = this.getCurrentDate();
    this.save(cb);
  }
  remove(cb) {
    super.remove({
      _id: this._id,
    }, cb);
  }
  createCar(carData, cb) {
    this.cars.push(carData);
    this.save(cb);
  }
  getCars() {
    return this.cars;
  }
}

рдореИрдВ рдЧрд▓рдд рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ рдЙрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛

mongoose.Promise = global.Promise;

mongoose.connect . рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ

// connect to mongo function
core.connect = function connect(opts) {
  mongoose.Promise = global.Promise;
  mongoose.connect(`mongodb://${opts.server}:${opts.port}/${opts.db}`);
  return mongoose.connection;
};

рд╕рднреА 79 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рдореНрдо рдХреНрдпрд╛ рдЖрдк рдХрд╣реАрдВ рднреА рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдЖрдкрдХреЛ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рддрдм рддрдХ рдирд╣реАрдВ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдЖрдк рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ...

рдирд╣реАрдВ, рдореИрдВ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

рдореБрдЭреЗ рдЕрднреА рдпрд╣ рдореБрджреНрджрд╛ рднреА рдорд┐рд▓рдирд╛ рд╢реБрд░реВ рд╣реБрдЖ рд╣реИред рдЙрди рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ!

рдореИрдВрдиреЗ рдЙрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛

mongoose.Promise = global.Promise;

mongoose.connect . рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ

// connect to mongo function
core.connect = function connect(opts) {
  mongoose.Promise = global.Promise;
  mongoose.connect(`mongodb://${opts.server}:${opts.port}/${opts.db}`);
  return mongoose.connection;
};

рд╣рд╛рдБ, рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рд╡рд╛рд▓реА рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдиреЗрд╡рд▓реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд╛рджрд╛ рд▓рд┐рдм рдХреЛ рдмрджрд▓ рджреЗрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рддрдм рддрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдЖрдк рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗред рддреЛ рдХрд╣реАрдВ

рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╡рд╣реАрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╣реЗрдЬрддрд╛ рд╣реВрдВ, рдлрд┐рд░ рдЗрд╕реЗ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╕рд╣реЗрдЬрддрд╛ рд╣реВрдВ

рдореИрдВрдиреЗ рдиреЗрд╡рд▓рд╛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдиреЗрд╡рд▓рд╛ рдХреЛ рдПрдХ рд╡рд╛рджрд╛ рд╕реМрдВрдкрдиреЗ рдХреЗ рд▓рд┐рдП @SAudelOG рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ

рдореИрдВ рдПрд╕рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди es7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЬрдм рдореИрдВ Model.findOne({}) рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореЗрд░рд╛ рдХреЛрдб рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рд╕рдорд╛рдзрд╛рди @SAudelOG рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред @IrishAdo рдХреА рддрд░рд╣ рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдиреЗрд╡рд▓рд╛ рдкреНрд▓рдЧрдЗрди рдХреЗ рдХрд╛рд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдмреНрд▓реВрдмрд░реНрдб рд╡рд╛рджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣рд╛рдБ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

  "dependencies": {
    "async": "^2.0.0-rc.6",
    "body-parser": "^1.15.0",
    "bower": "^1.7.7",
    "compression": "^1.6.1",
    "connect-mongo": "^1.2.1",
    "consolidate": "^0.14.1",
    "cookie-parser": "^1.4.3",
    "express": "^4.13.4",
    "express-jwt": "^3.4.0",
    "express-session": "^1.13.0",
    "express-validator": "^2.20.8",
    "faker": "^3.1.0",
    "http-errors": "^1.5.0",
    "jsonwebtoken": "^7.0.1",
    "lodash": "^4.13.1",
    "method-override": "^2.3.5",
    "mongoose": "^4.4.3",
    "mongoose-beautiful-unique-validation": "^3.0.0",
    "mongoose-delete": "^0.3.3",
    "mongoose-validator": "^1.2.5",
    "morgan": "^1.6.1",
    "passport": "^0.3.2",
    "passport-local": "^1.0.0",
    "swig": "^1.4.2"
  }

рдореИрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рди рд╣реА рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ([email protected] рдкрд░)ред

рдореЗрд░реЗ рдРрдк рдХреЛ "--trace-deprecation" рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдирд╛ рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ:

Trace: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead:
http://mongoosejs.com/docs/promises.html
    at Object.exports._printDeprecationMessage (internal/util.js:30:13)
    at Promise.deprecated [as then] (internal/util.js:54:22)
    at fnWrapper (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:188:11)
    at EmbeddedDocument.Object.defineProperty.value.fn (.\node_modules\mongoose\lib\schema.js:219:11)
    at _next (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:62:30)
    at fnWrapper (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:186:18)
    at EmbeddedDocument.Object.defineProperty.value.fn (.\node_modules\mongoose\lib\schema.js:173:18)
    at EmbeddedDocument._next (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:62:30)
    at EmbeddedDocument.proto.(anonymous function) [as $__original_save] (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:108:20)
    at .\node_modules\mongoose\lib\document.js:1917:24
    at new Promise.ES6 (.\node_modules\mongoose\lib\promise.js:45:3)
    at EmbeddedDocument.wrappedPointCut [as save] (.\node_modules\mongoose\lib\document.js:1893:14)
    at async.each.i (.\node_modules\mongoose\lib\schema.js:225:18)
    at .\node_modules\async\lib\async.js:181:20
    at Object.async.forEachOf.async.eachOf (.\node_modules\async\lib\async.js:233:13)
    at Object.async.forEach.async.each (.\node_modules\async\lib\async.js:209:22)
    at model.Object.defineProperty.value.fn (.\node_modules\mongoose\lib\schema.js:223:15)
    at _next (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:62:30)
    at fnWrapper (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:186:18)
    at .\node_modules\mongoose\lib\schema.js:200:17
    at .\node_modules\mongoose\node_modules\kareem\index.js:127:16
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickDomainCallback (node.js:390:13)

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдХреЛрдИ рдорджрдж рд╣реИ рддреЛ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдЙрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рдирдореЗрдВ рдЙрдирдХреЗ рдЕрдВрджрд░ рдЙрдк-рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХреБрдЫ:

var data = {
  field: 'value',
  another_field: [{subdocfield1: 'value', subdocfield2: 'value'}]
} 

mySchema.create(data, cb)

рдпрд╣ рдЕрдиреНрдп рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рд╕рдмрдбреЙрдХреНрд╕ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣ рддрдм рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рд╕рдмрдбреЛрдХ рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рдирд┐рд░реНрдорд╛рдг рдХрдерди рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ:

var data = {
  field: 'value'
} 

mySchema.create(data, cb)

_рдиреЛрдЯ:_ mongoose.Promise = global.Promise рдиреЗ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛

рдЬрдм рдореИрдВ рдХрд┐рд╕реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ remove() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдЙрд╕реА рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЕрдиреБрднрд╡ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдпрд╣рд╛рдВ рдпрд╛ рдХрд╣реАрдВ рдФрд░ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

Model.create(objects, callback); рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА, рд╢рд╛рдпрдж рдпрд╣ рдлрд┐рдХреНрд╕ рдЕрднреА рддрдХ npm рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ?

рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдЗрд╕реЗ рдкрдврд╝рдХрд░ рдЦреБрд╢реА рд╣реБрдИ, рдпрд╣ рдЪрд┐рдВрддрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рд╣реЛрдиреЗ рдкрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рд░рдЦреВрдВрдЧрд╛ред

рдЗрд╕реЗ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдФрд░ рдореИрдВ рдХрд╣реАрдВ рднреА рдиреЗрд╡рд▓реЗ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдСрди-рд╣реЗрдбрд░ рдХреЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рдЕрдВрджрд░ рдореИрдВ рдЗрд╕реЗ model.save рдХреЙрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдФрд░ рдореЙрдбрд▓ рдХреЛ рдХреЙрд▓рдмреИрдХ рдХреЗ рдмрд╛рд╣рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред рдореЙрдбрд▓ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕реЗрд╡ рдХреЙрд▓ рджреЛрдиреЛрдВ рдХреЛ рдХреЙрд▓рдмреИрдХ рдХреЗ рднреАрддрд░ рд░рдЦрдиреЗ рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред

рдиреЛрдб v4.4.6 рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдЬрдмрдХрд┐ v4.4.2 рдкрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ

@SKatiyar рдХреЛрдб рдирдореВрдирд╛ рдХреГрдкрдпрд╛

рдореЗрд░реЗ рд╕рд╛рде рднреА, рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ () рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдореЗрд░реЗ рд▓рд┐рдП рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ

рдпрд╣ рд╕рд╣реА рд╣реИ! mongoose.connect(MONGO_URI); mongoose.Promise = global.Promise;

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрд░реЗ рдЕрдВрдд рдореЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:

const mongoose = require('mongoose');
const schema = new mongoose.Schema({
  data: { type: Number }
});
const Model = mongoose.model('schema', schema);
mongoose.connect('mongodb://127.0.0.1:27017/somedatabase');
const newModel = new Model({ data: 1 });
const save = newModel.save(() => {
  console.log('saved model');
});
console.log(typeof save.then); //=> 'function'

рдЕрдЬреАрдм рдЪреАрдЬ рдЬреЛ рдореИрдВ рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ newModel.save(callback) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрднреА рднреА рдПрдХ рд╡рд╛рджрд╛ рджреЗрддрд╛ рд╣реИ (рдпрд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ .then рдХрд╛ рдкреНрд░рдХрд╛рд░ 'function' рд╣реИ)ред рдХреНрдпрд╛ рд╡рд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ?

рдпрд╣рд╛рдБ рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ:
рдиреЛрдб: v6.3.1
рдиреЗрд╡рд▓рд╛: v4.5.8

рдЕрдЧрд░ рдЖрдкрдХреЛ рдореБрдЭрд╕реЗ рдХреЛрдИ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдП рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

@dvlsg рд╣рд╛рдБ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рд╕рд╣реЗрдЬреЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛, рднрд▓реЗ рд╣реА рдЖрдк рдХреЙрд▓рдмреИрдХ рдкрд╛рд╕ рдХрд░реЗрдВ

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╕рдордЭрд╛рдПрдЧрд╛ рдХрд┐ рд▓реЛрдЧ рд╡рд╛рджреЗ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдХреНрдпреЛрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡реЗ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╡рд╣ рд╕рдм рдХреБрдЫ рд╕рдордЭрд╛рддрд╛ рд╣реИ .. рдореИрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдкрд╛рдЧрд▓ рд╣реВрдБ рдФрд░ рд╕рднреА рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ

рдпрд╣ рдореЗрд░реА рдЧрд▓рддреА рд╣реИ, рд╣рд╛рдБ .save() рдПрдХ рд╡рд╛рджрд╛ рджреЗрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдЪреЗрддрд╛рд╡рдиреА рдиреЗ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░ рджрд┐рдпрд╛ред http://mongoosejs.com/docs/promises.html (рдмрд╕ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рдкрдврд╝рдирд╛ рдерд╛ )

рддреЛ .save() рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рддрдм рддрдХ рдирд╣реАрдВ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдЖрдк .then() рдкрд░ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ .then() рдкрд░ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдиреЗрд╡рд▓рд╛ рдХрд╣реАрдВ рдПрдХ рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдХреЛрдб рдирдореВрдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ: +1:

рдЖрдИрдПрдордПрдЪрдУ, рдпрд╣ рд╕рдВрджреЗрд╢ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрдЬрд╛рдп рдПрдХ рддреНрд░реБрдЯрд┐ ("рдЪреАрдЬреЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА") рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ("рдзреНрдпрд╛рди рджреЗрдВ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП"), рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдФрд░ aModel.save() рд╡рд┐рдзрд┐ MongoDB рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдореВрд▓ рдХрд╛рд░рдг рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛ред "mongoose.Promise = Global.Promise;" рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рдлрд▓ рд░рд╣рд╛ред

рдореИрдВ "рдореЛрдВрдЧреЛрдЬрд╝" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛: "^ 4.5.9"ред

рд╕рд╣реЗрдЬреЗрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд╛рджрд╛ lib рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдПрдХ рдХреЛрдб рдирдореВрдирд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@vkarpov15

рддреБрдо рд╕рд╣реА рдХрд╣ рд░рд╣реА рд╣реЛред рдореИрдВрдиреЗ рдЕрднреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╕реЗрд╡ рд░рд┐рдЬрд▓реНрдЯ рдХреЛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдиреНрдп рдХреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдЪрд╛рд╣рд┐рдПред рдХрд╛рд░рдг рдЬрд╛рдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рди рджреЗрдВред

рдЬрдм рднреА рдореИрдВ .then () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд▓реЙрдЧ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреЙрдк рдЕрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрд╡рд▓рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдиреЗрд╡рд▓рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ

рддреЛ, рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

'use strict';
var Promise = require('bluebird');

// Development specific configuration
// ==================================
module.exports = {
  // MongoDB connection options
  mongo: {
    uri: 'mongodb://localhost/fullstack-dev',
    options: {
      promiseLibrary: Promise
    }
  },
  // .. other config
};

рдлрд┐рд░ рдореЗрд░реА рдореБрдЦреНрдп рдлрд╛рдЗрд▓ рдореЗрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

'use strict';

// Set default node environment to development
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
process.env.BLUEBIRD_DEBUG = 1;
var mongoose = require('mongoose');
var config = require(path.join(__dirname, 'server', 'config', 'environment'));

// Connect to database
var db = mongoose.connect(config.mongo.uri, config.mongo.options);
mongoose.connection.on('error', function(err) {
  console.error('MongoDB connection error: ' + err);
  process.exit(-1);
});

рдФрд░ рдореБрдЭреЗ рдЕрднреА рднреА query.exec рдХрд░рддреЗ рд╕рдордп рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓ рд░рд╣реА рд╣реИред рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдкрд░ рдХреЛрдИ рд╕реБрдЭрд╛рд╡?
[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдиреЗрд╡рд▓рд╛ рдФрд░ рдмреНрд▓реВрдмрд░реНрдб рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝рдирд╛]
рдореИрдВ рдиреЗрд╡рд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ ^4.6.1 , рдмреНрд▓реВрдмрд░реНрдб ^3.4.6

рдореБрдЭреЗ рдиреЗрд╡рд▓рд╛ 4.6.1 рдФрд░ рдиреЛрдб 4.4.5 . рдкрд░ рднреА рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓ рд░рд╣реА рд╣реИ

    var mongoose = require('mongoose');
    mongoose.Promise = global.Promise;
    mongoose.connect(dbConfig);
    var connection = mongoose.connection;

@manu29d рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк mongoose.Promise = bluebird рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

@vkarpov15 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╣реВрдВред рдореИрдВрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ var Promise = рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ promiseLibrary: Promise рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ред (рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдкрд╣рд▓рд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджреЗрдЦреЗрдВ)

рд╕рд╛рде рд╣реА, рдореИрдВрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рджрд┐рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ promiseLibrary: require('bluebird') рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред

рдореБрдЭреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЛрдб рдирдореВрдиреЗ рдореЗрдВ рдХрд╣реАрдВ рднреА mongoose.Promise = require('bluebird') рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИред var Promise = require('bluebird'); _not_ рд╕рд╣реА рд╣реИред

@vkarpov15 рдореИрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ http://mongoosejs.com/docs/promises.html#promises -for-the-mongodb-driver

рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдорд╛рдиреНрдп рд╣реИ? рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк ( promiseLibrary ) рдЕрднреА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдпрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ mongoose.Promise = global.Promise рд╕реЗрдЯ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

mongoose.Promise = global.Promise
mongoose.connect рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ mongoose.Promise = global.Promise рдкрд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@ manu29d рд╡реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд╣реА рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ promiseLibrary рд╡рд┐рдХрд▓реНрдк рдХреЗрд╡рд▓ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд mongodb рдбреНрд░рд╛рдЗрд╡рд░, _not_ mongoose рдореЙрдбрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

@ рдЬрд╝реБрдмреИрд░-рдлрд╝рд╛рд░реВрдХрд╝реА -10 рдкреА рдиреАрдЪреЗ рджреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрд░реЗ рд▓рд┐рдП 4.5.9 рдпрд╛ 4.6.3 рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ:

'use strict';

Error.stackTraceLimit = Infinity;

var assert = require('assert');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/gh4291');
mongoose.set('debug', true);

var connection = mongoose.connection;

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпрд╛ рдиреЗрд╡рд▓реЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж!

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдиреЗрд╡рд▓рд╛ рдХрд╛ рд╡рд╛рджрд╛ lib рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рддрдВрддреНрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдореЛрдВрдЧреЛрдбрдм рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИред рдиреЗрд╡рд▓рд╛ рдореЗрдВ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдордп рдиреЗрд╡рд▓рд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдореЛрдВрдЧреЛрдбрдм рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рдпрд╣ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рджреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдХрдиреЗрдХреНрдЯ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рддреЛ рдЖрдк рдХреЗрд╡рд▓ рд╡рд╛рджрд╛ lib рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╛рдж рдореЗрдВ рдирд╣реАрдВред рдЗрди рдорддрднреЗрджреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд░рдгреА рд╣реЛрддреА рд╣реИ, рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╕реНрддреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ .createConnecton() рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЬрд┐рд╕ рдордЬрд╝реЗрджрд╛рд░ рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБ Q... рд▓реЗрдХрд┐рди! рд▓реЗрдХрд┐рди рдореИрдВ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ (рдФрд░ рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ) рдЗрд╕реЗ var рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдмреНрд▓реЙрдХ рдореЗрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рдд

var mongoose = require('mongoose'),
        connection1 = mongoose.createConnection(dbConn1Str),
        connection2 = mongoose.createConnection(dbConn2Str)
;
mongoose.Promise = Q.makePromise;

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

var mongoose = require('mongoose'),
        connection1, connection2
;
mongoose.Promise = Q.makePromise;
connection1 = mongoose.createConnection(dbConn1Str)
connection2 = mongoose.createConnection(dbConn2Str)

рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ, рд▓реЗрдХрд┐рди srsly...

рд╣рд╛рдБ рдпрд╣ рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдиреЗрд╡рд▓рд╛ 4.x mpromise рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рддрдХ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдЖрдк рдЗрд╕реЗ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗред

рдХреНрд╡реЗрд░реА рд╕рд╣рд╛рдпрдХ рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд рдЦреЛрдЬ() рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореИрдВ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВред рдореИрдВ рдХрд╣реАрдВ рднреА then рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ред

BookStore.find().byUsingQueryHelper(1,2,3).lean().exec(function (err, docs) { ... })

рд▓реЙрдЧ:

рдиреЗрд╡рд▓рд╛: Bookstores.find ({рд╕реНрдерд╛рди: {'$рдирд┐рдХрдЯ': [28.742712943610545, -13.865369983731426], '$maxDistance': 0.0012556898446083817 }}, { рд╕реАрдорд╛: 10, рдлрд╝реАрд▓реНрдб: рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд})

(рдиреЛрдб: 82366) рдкрджрд╛рд╡рдирддрд┐ рдЪреЗрддрд╛рд╡рдиреА: рдиреЗрд╡рд▓рд╛: mpromise (рдиреЗрд╡рд▓рд╛ рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд╛рджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдкрджрд╛рд╡рдирдд рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд╛рджреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкреНрд▓рдЧ рдЗрди рдХрд░реЗрдВ: http://mongoosejs.com/docs/promises.html

@pronebird рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЗрд╕ рддрд░рд╣ exec() рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, exec() рдкрд░ рдХреЙрд▓рдмреИрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд╛рджреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдмрд╕ mongoose.Promise = global.Promise рдХрд░реЗрдВ рдФрд░ рдЖрдкрдХреЛ рд╡рд╣ рдЪреЗрддрд╛рд╡рдиреА рдЕрдм рдФрд░ рдирд╣реАрдВ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред

@pronebird рдкреЛрд╕реНрдЯ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА, рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореЗрд░реА рд╕реНрдХреАрдорд╛ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдиреАрдЪреЗ рдореЗрд░реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдорд╛рди рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ
рднреВрдорд┐рдХрд╛: {
рдЯрд╛рдЗрдк рдХрд░реЗрдВ: рд╕реНрдЯреНрд░рд┐рдВрдЧ,
рдПрдирдо: ['рдХреНрд▓рд╛рдЗрдВрдЯ', 'рдПрдбрдорд┐рди'],
рдбрд┐рдлрд╝реЙрд▓реНрдЯ: 'рдЧреНрд░рд╛рд╣рдХ'
}
рдореИрдВ рднреВрдорд┐рдХрд╛ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдФрд░ рдпрд╣ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрддреНрддрд░ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рдж

@Muhammedalbayati рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЗ рдореБрджреНрджреЗ рдХрд╛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджреЗ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ? рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╛рджреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдиреЗрд╡рд▓рд╛ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИред

@varunjayaraman рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЪреЗрддрд╛рд╡рдиреА
рдкрджрд╛рд╡рдирддрд┐ рдЪреЗрддрд╛рд╡рдиреА: рдиреЗрд╡рд▓рд╛: mpromise (рдиреЗрд╡рд▓рд╛ рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд╛рджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдкрджрд╛рд╡рдирдд рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд╛рджреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкреНрд▓рдЧ рдЗрди рдХрд░реЗрдВ: http://mongoosejs.com/docs/promises.html

рдиреЗрд╡рд▓рд╛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рджрд╛ = рд╡реИрд╢реНрд╡рд┐рдХред рд╡рд╛рджрд╛; рдбреАрдмреА . рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
mongoose.connect('mongodb://localhost:27017/mydb');

@ Muhammedalbayati рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ @ vkarpov15 рдиреЗ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдХреНрдпреЛрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдиреЗрд╡рд▓рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ exec рдХреЗ рднреАрддрд░ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

ES6 "yiled" рдореИрдВ mongoose рдХреЛ v.4.7.7.7 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж doc.save рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред
рдЕрдВрдд рдореЗрдВ рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ mongoose.Promise = global.Promise ред рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдпрд╣ рдЕрднреА рднреА рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд░рд╣рд╛ рд╣реИ

Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ [email protected] рдХрд╛ рдЕрдкрдирд╛ рд╡рд╛рджрд╛ рдореЙрдбреНрдпреВрд▓ рд╣реИред рдХреНрдпрд╛ рд╡рд╣ рд╕рд╣реА рд╣реИ??
рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ?

рдпрд╣ рдиреЗрд╡рд▓рд╛ рд╣реИ рдПрдХ es6-рд╡рд╛рджрд╛ lib рдЬреЛрдбрд╝реЗрдВред

рдЗрддрдирд╛ рдмреЗрд╡рдХреВрдл рдореБрджреНрджрд╛!

рдкреБрдирд╢реНрдЪ: рдЙрд╕ рдХрдордмрдЦреНрдд рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЕрдкрдиреА рдпреЛрдиреА рдХреЛ рднрдЧрд╛рдУ!

рдПрдХ рд╕рд╛рдереА рд░реВрд╕реА рд╡рдХреНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдХрдорддрд░ рдкреНрд░рд╛рдгреА рдиреЗ рдЖрдкрд╕реЗ рдЬреЛ рдХреБрдЫ рднреА рд▓рд┐рдЦрд╛ рд╣реИ рдЙрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рди рдХрд░рдиреЗ рдХрд╛ рдЖрдЧреНрд░рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИред

@ vkarpov15 рдореИрдВрдиреЗ mongoose.Promise = global.Promise; рдФрд░ mongoose.Promise = require('bluebird'); рджреЛрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдЕрднреА рднреА рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓ рд░рд╣реА рд╣реИред

_рдХреНрдпрд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдореИрдВ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?_

const mongoose = require('mongoose');

mongoose.Promise = global.Promise;

mongoose.connect('mongodb://localhost/users_test');

mongoose.connection
  .once('open', () => {
    console.log('connectecd to db')
  })
  .on('error', (err) => {
    console.warn('Warning', err)
  });

@protoEvangelium рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рдиреЗрд╡рд▓реЗ рдЖрдпрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдиреЗрд╡рд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХреА рдЧрдИ рд╣реИ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдк рдиреЗрд╡рд▓рд╛/рдиреЛрдб рдХрд╛ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@varunjayaraman рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХрд╣реАрдВ рдФрд░ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЕрдкрдиреЗ user.js рд╕реНрдХреАрдорд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдиреЗрд╡рд▓рд╛ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреАрдорд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

const mongoose = require('mongoose')
const Schema = mongoose.Schema
const UserSchema = new Schema({
  name: String,
})
const User = mongoose.model('user', UserSchema)
module.exports = User

рдиреЛрдб v7.0.0рдиреЗрд╡рд▓рд╛ v4.8.1

@protoEvangelium рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдпрд╛ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓ рд░рд╣реА рд╣реИ?

рдореБрдЭреЗ рдПрдХ рдмрд╛рд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реБрдИ рд╣реИ - рдЕрдкрд░рд╛рдзреА рдПрдХ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдерд╛, рдЬрд┐рд╕рдиреЗ рдЕрдкрдиреА рдЦреБрдж рдХреА рдиреЗрд╡рд▓рд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рдРрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрдирдХреЗ package.json рдореЗрдВ "mongoose": "^4.1.1" рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпреЗ рдореЙрдбреНрдпреВрд▓ рд╡рд╛рд░реНрд╖рд┐рдХ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рднреА) - рдЙрдирдореЗрдВ рд╡рд╛рджрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рднрд╛рдЧ рдХреА рдХрдореА рд╣реИред @protoEvangelium рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@SAudelOG рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

@varunjayaraman рдореИрдВрдиреЗ рдХреЗрд╡рд▓ Mongoose рдФрд░ Mocha рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Mongo рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЕрдм рддрдХ рдПрдХ рдмреЗрдпрд░рдмреЛрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИред

@Spown рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:
"mocha": "^3.2.0", "mongoose": "^4.8.1", "nodemon": "^1.11.0"

рдзрдиреНрдпрд╡рд╛рдж :)

@protoEvangelium рдПрдХ рдорд┐рдирдЯ рд░реБрдХрд┐рдП, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА?

const mongoose = require('mongoose')
mongoose.Promise = global.Promise // <--
const Schema = mongoose.Schema
const UserSchema = new Schema({
  name: String,
})
const User = mongoose.model('user', UserSchema)
module.exports = User

рдпрджрд┐ рдЖрдк рдПрдХ рдиреЗрд╡рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рд╡рд╛рджрд╛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЗрд╕ рдореЙрдбрд▓ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╡реЗрд░реА рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдлреЗрдВрдХ рджреЗрдЧреАред

@рд╕реНрдкреЙрди

рдореИрдВ рд╕рд╣реА рд╕рдордп рдкрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╣реБрдЖред рдЬрдм рднреА рдореИрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣реЗрдЬ рд░рд╣рд╛ рдерд╛, рдореБрдЭреЗ рд╡рд╣реА рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓ рд░рд╣реА рдереАред рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ рдиреЗрд╡рд▓реЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдмреНрд▓реВрдмрд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдиреЗрд╡рд▓рд╛ рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИред рдкреНрд░реЙрдорд┐рд╕ рдиреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

@Spown рдзрдиреНрдпрд╡рд╛рдж рд╕рд░! рд╡рд╣ рдореБрджреНрджрд╛ рдерд╛ред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ Mongoose рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдЕрдкрдиреА test_helper.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ mongoose.Promise = global.Promise; рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВрдиреЗ mongoose.Promise = global.Promise; рдХреЛ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рд╕реНрдХреАрдорд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ !!!! рдХреЛрдИ рдФрд░ рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ

const mongoose = require('mongoose')
mongoose.Promise = global.Promise;
const Schema = mongoose.Schema

рдореЗрд░реЗ рд╕реНрдХреАрдорд╛ рдореЗрдВ "рдЖрдмрд╛рджреА рдпреЛрдЧреНрдп" рд╡рд░реНрдЪреБрдЕрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдореЗрд░реЗ рдРрдк рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде --trace-deprecations , рдЖрдк рдЕрдкрд░рд╛рдзреА рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

(node:8846) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html
    at model.wrappedPointCut [as init] (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mongoose/lib/services/model/applyHooks.js:141:26)
    at completeMany (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mongoose/lib/query.js:1254:12)
    at Immediate.cb (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mongoose/lib/query.js:1117:13)
    at Immediate.<anonymous> (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mquery/lib/utils.js:137:16)
    at runCallback (timers.js:651:20)
    at tryOnImmediate (timers.js:624:5)
    at processImmediate [as _immediateCallback] (timers.js:596:5)

рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ):

import * as mongoose from "mongoose";
(<any>mongoose).Promise = global.Promise;
mongoose.connect('mongodb://localhost/blah')

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдХреНрдпрд╛ рдореБрдЭреЗ "рдЖрдмрд╛рджреА рдпреЛрдЧреНрдп" рд╡рд░реНрдЪреБрдЕрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдкрд░ рд╡рд╛рджрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рд░реБрдХреЛ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡рд╛рдкрд╕ рдЖрдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ред

рдареАрдХ рд╣реИ, рдХреБрдЫ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рдЕрдкрдиреА рд╕реНрдХреАрдорд╛ рдкрд░ Promise рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЗ index рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реЛред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, website_pages рд╕рдВрдЧреНрд░рд╣ рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдХрднреА рднреА рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╕рдВрдЧреНрд░рд╣ рдерд╛, рдЗрд╕ рд╕реНрдХреАрдорд╛ рдкрд░ mongoose.Promise рд╕реЗ global.Promise рдХреА рд╕реНрдерд╛рдкрдирд╛ рдиреЗ рдЕрдХреЗрд▓реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдерд╛ рдЗрд╕реЗ рд╕рднреА рд╕реНрдХреАрдорд╛ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

ES6 рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░реЗрдВ? рдХреНрдпрд╛ рд╡реЗ рдЕрдм рд╣рд░ рдЬрдЧрд╣ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ?

mongoose.Promise = Promise; // eh?

рдзрдиреНрдпрд╡рд╛рдж @Spown , рдореБрдЭреЗ рдЙрд╕реА рдкрджрд╛рд╡рдирддрд┐ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдореЙрдбрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж mongoose.Promise = global.Promise рд░рдЦрд╛ рдерд╛ред рдЕрдм рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА рдЪрд▓реА рдЧрдИ рд╣реИред

@Spown рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ mongoose.Promise = global.Promise рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдиреЛрдб рдХреЗ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЪрдВрдЪрд▓ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ test_helpers.js рдкрд╣рд▓реЗ рд▓реЛрдб рд╣реЛ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдиреЗрд╡рд▓рд╛ рдХрд╛ рд╡рд╛рджрд╛ рдХрд╛рд░реНрдп рд╕реЗрдЯ рдХрд░ рд╕рдХреВрдВ?

рдХреНрдпрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐...

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ require mongoose рдХрд░рддрд╛ рд╣реВрдВ, рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдФрд░ рд╕рднреА рдбреАрдмреА рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдмрд┐рд▓реНрдХреБрд▓ рд╕реБрдВрджрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рдмреБрд▓реЗрдЯрдкреНрд░реВрдлред рдФрд░ рдореИрдВ рдЗрд╕реЗ рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреАрдЬрд╝ рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ (mongoose.connect() рдХреЗ рдмрдЬрд╛рдп mongoose.connect() mongoose.createConnection() рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрдиреЗрдХреНрд╢рди) - рдЖрдкрдХреЛ рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рд╕реЗ рдЬреБрдбрд╝реЗ рдиреЗрд╡рд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗред рдЕрдиреНрдпрдерд╛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ рдХреБрдЫ рдЕрдЬреАрдм рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рднреА рдмрджрддрд░ рд╣реИред

рд╣рд╛рдБ рдореИрдВ @Spown рдЬреИрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реВрдБред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реА рдмрдбрд╝реА рд░рд┐рд▓реАрдЬ рддрдХ рдиреЗрд╡рд▓реЗ рдХреЛ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд░рдЦрдиреЗ рдХрд╛ рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрдм рд╣рдо рдПрдордкреНрд░реЛрдорд╛рдЗрдЬ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ

libs/mongoose.js

import mongoose from 'mongoose'; // real mongoose only be required once here 

mongoose.Promise = global.Promise; // so that you dont have to do this on every require
const Schema = mongoose.Schema;

export {
  mongoose as default, // kind of singleton
  mongoose,
  Schema,
};

index.js

import mongoose from './libs/mongoose';
mongoose.connect(process.env.MONGODB_URI);

рдореЙрдбрд▓/user.js

import {mongoose, Schema} from '../libs/mongoose';

export default mongoose.model('User', new Schema({
  name: String,
  password: String,
}));

@ рд╣реЙрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ() рдХреЙрд▓ рдХреИрд╢ рдХреА рдЬрд╛рддреА рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреАрдорд╛ рдШреЛрд╖рдгрд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рджрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдпрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)
рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдХреБрдЫ:
mongoose.setPromise(global.Promise);

@ рд╢-рдЧреБрдЯреА рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░ рдХреЛрдб рдХрд╛ рд╡рд╣ рдЯреБрдХрдбрд╝рд╛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреЙрд▓рдмреИрдХ рдпрд╛ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЬрд╝реЛрд░ - рдЬрд╝реЛрд░ рд╕реЗ рд╣рдВрд╕рдирд╛ред

рдЙрдкрдпреЛрдЧ

mongoose.createConnection(URI)

рдХреНрдпрд╛ рдХреЛрдИ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкреГрдереНрд╡реА рдкрд░ рдиреЗрд╡рд▓реЗ рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рд╕реЗ рдЗрдирдХрд╛рд░ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдкрд┐рдЫреЗрдбрд╝реА рд╕рдВрдЧрддрддрд╛ред рдиреЛрдб 4 рдЬрд╛рд░реА рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ Mongoose 4.x рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рдерд╛ред рд╣рдо рдЕрдЧрд▓реА рдмреИрдХрд╡рд░реНрдб рдмреНрд░реЗрдХрд┐рдВрдЧ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВрдЧреЗред

рдпрд╣ рдХрдм рд╣реЛрдЧрд╛?

mongoose.createConnection(URI) рдиреЗрд╡рд▓рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рдмрдЧ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдШрдВрдЯреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ рд╡рд╛рдкрд╕ рдЪрд▓рд╛ рдЧрдпрд╛

mongoose.connect(process.env.MONGODB); mongoose.createConnection рд╕реЗ (process.env.MONGODB)

рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕рдиреЗ рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ .. рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ ...

@MickL рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдЧрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ рдПрдХ рдЖрд░рд╕реА0 рдЖрдЙрдЯ рд╣реЛрдЧрд╛, рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдиреЗрд╡рд▓рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрд▓реИрдХ рдЪреИрдирд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

tarun1793 picture tarun1793  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gustavomanolo picture gustavomanolo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lukasz-zak picture lukasz-zak  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jeremyml picture jeremyml  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

p3x-robot picture p3x-robot  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ