Mongoose: μ‚¬μš© 쀑단 κ²½κ³ 

에 λ§Œλ“  2016λ…„ 07μ›” 01일  Β·  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);

λ“œλΌμ΄λ²„λŠ” Driver 클래슀의 μΈμŠ€ν„΄μŠ€μž…λ‹ˆλ‹€.

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 λŒ“κΈ€

흠 μ–΄λ””μ—μ„œλ‚˜ promiseλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? 약속을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” ν•œ 이 κ²½κ³ λ₯Ό λ°›μ•„μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€...

μ•„λ‹ˆ, λ‚˜λŠ” 약속을 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€

저도 이 문제λ₯Ό 이제 막 μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μ•„λŠ” 약속을 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!

λ‚˜λŠ” κ·Έ κ²½κ³ λ₯Ό ν•΄κ²°ν–ˆλ‹€.

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;
};

예, 이 κ²½κ³ λŠ” 당신이 promiseλ₯Ό μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©΄ mongooses default promise libλ₯Ό λ³€κ²½ν•˜λΌκ³  말해야 ν•˜μ§€λ§Œ, .then을 μ–΄λ”˜κ°€μ—μ„œ ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ” ν•œ λ°œμƒν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€.

λ‚˜λŠ” 그것을 μ–»κ³  μžˆμ§€λ§Œ λ‚˜λŠ” 객체λ₯Ό μ €μž₯ ν•œ λ‹€μŒ μ½œλ°±μ—μ„œ μˆ˜μ •ν•˜κ³  λ‹€μ‹œ μ €μž₯ν•˜λŠ” κ³³μ—μ„œλ§Œ 그것을 μ–»μŠ΅λ‹ˆλ‹€.

mongoose μ—°κ²° 전에 mongoose에 약속을 ν• λ‹Ήν•˜κΈ° μœ„ν•΄ @SAudelOG μ ‘κ·Ό 방식을 μ‹œλ„ν–ˆμ§€λ§Œ μ—¬μ „νžˆ 이 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

비동기 ν•¨μˆ˜ es7을 μ‚¬μš© 쀑이고 Model.findOne({})을 μ‹œλ„ν•  λ•Œ μ½”λ“œκ°€ μ°¨λ‹¨λ©λ‹ˆλ‹€.

@SAudelOG κ°€ μ œκ³΅ν•˜λŠ” μ†”λ£¨μ…˜μ΄ μž‘λ™ν•©λ‹ˆλ‹€. @IrishAdo 와 λ§ˆμ°¬κ°€μ§€λ‘œ 객체λ₯Ό μ €μž₯ν•  λ•Œλ„ 이것을 μ–»μŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ Bluebird Promise 라이브러리λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ½κ΅¬μŠ€ ν”ŒλŸ¬κ·ΈμΈ 쀑 ν•˜λ‚˜ λ•Œλ¬ΈμΌ κ²ƒμž…λ‹ˆλ‹€.

λ‹€μŒμ€ λ‚΄κ°€ μ‚¬μš©ν•˜λŠ” 쒅속성 λͺ©λ‘μž…λ‹ˆλ‹€.

  "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)

ν•˜μœ„ λ¬Έμ„œκ°€ μ—†λŠ” λ‹€λ₯Έ μ»¬λ ‰μ…˜μ—μ„œλŠ” λ°œμƒν•˜μ§€ μ•ŠμœΌλ©° λ‹€μŒκ³Ό 같이 ν•˜μœ„ λ¬Έμ„œ 데이터 없이 create 문을 싀행해도 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

var data = {
  field: 'value'
} 

mySchema.create(data, cb)

_μ°Έκ³ :_ mongoose.Promise = global.Promise λŠ” κ²½κ³  문제λ₯Ό ν•΄κ²°ν–ˆμ§€λ§Œ

λ¬Έμ„œμ—μ„œ remove() λ₯Ό μ‚¬μš©ν•  λ•Œ λ™μΌν•œ 감가상각 κ²½κ³ κ°€ λ°œμƒν•©λ‹ˆλ‹€. μ—¬κΈ° λ˜λŠ” λ‚΄ μ½”λ“œμ˜ λ‹€λ₯Έ κ³³μ—μ„œ 약속을 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Model.create(objects, callback); λ₯Ό μ‚¬μš©ν•  λ•Œ 이 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ 이 μˆ˜μ • 사항이 아직 npm에 κ²Œμ‹œλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆκΉŒ?

이것을 읽고 κΈ°λ»ν•˜λŠ” 것은 λ†€λΌμš΄ 일이 μ•„λ‹™λ‹ˆλ‹€. 이 λ¬Έμ œκ°€ λ°œμƒν•  λ•Œ 디버깅을 돕기 μœ„ν•΄ 계속 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

이것도 μ–»κ³  λ‚˜λŠ” λͺ½κ΅¬μŠ€ 약속을 어디에도 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

라이브러리 on-headers 콜백 λ‚΄λΆ€μ˜ model.save 호좜둜 λ‹€μ‹œ 좔적할 수 μžˆμ—ˆκ³  λͺ¨λΈμ€ 호좜되기 전에 콜백 μ™ΈλΆ€μ—μ„œ μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 콜백 내에 λͺ¨λΈ 생성과 μ €μž₯ ν˜ΈμΆœμ„ λͺ¨λ‘ 넣어도 차이가 μ—†μŠ΅λ‹ˆλ‹€.

λ…Έλ“œ v4.4.6μ—μ„œ 이 λ¬Έμ œμ— μ§λ©΄ν•˜λŠ” 반면 v4.4.2μ—μ„œλŠ” μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

@SKatiyar μ½”λ“œ μƒ˜ν”Œ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€

저와 λ™μΌν•˜κ²Œ save() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ ν›„ 이 λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

이것은 μž‘λ™ν•©λ‹ˆλ‹€! 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 예, ν˜„μž¬ μ˜ˆμƒλ˜λŠ” λ™μž‘μž…λ‹ˆλ‹€. μ½œλ°±μ„ μ „λ‹¬ν•˜λ”λΌλ„ μ €μž₯은 항상 약속을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

κΈ€μŽ„, λ‚˜λŠ” 그것이 μ‚¬λžŒλ“€μ΄ 그듀이 약속을 μ‚¬μš©ν•˜κ³  μžˆλ‹€κ³  μƒκ°ν•˜μ§€ μ•Šμ„ λ•Œμ—λ„ 약속 κ²½κ³ λ₯Ό λ³΄λŠ” 이유λ₯Ό μ΅œμ†Œν•œ μ„€λͺ…ν•  것이라고 μƒκ°ν•©λ‹ˆλ‹€.

그것이 λͺ¨λ“  것을 μ„€λͺ…ν•©λ‹ˆλ‹€. λ‚˜λŠ” μ•½κ°„ νŽΈμ§‘μ¦μ μ΄μ–΄μ„œ λͺ¨λ“  κ²½κ³ λ₯Ό μ—†μ• κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€ πŸ’ƒ

λ‚΄ 잘λͺ»μž…λ‹ˆλ‹€. yup .save()κ°€ 약속을 λ°˜ν™˜ν•˜λ―€λ‘œ 이것이 μ˜ˆμƒλ˜μ§€λ§Œ μ—¬μ „νžˆ 경고둜 인해 κΆκΈˆν–ˆμŠ΅λ‹ˆλ‹€. http://mongoosejs.com/docs/promises.html (첫 단락 🎱만 읽어야 함)

λ”°λΌμ„œ .save() λŠ” 약속을 λ°˜ν™˜ν•˜μ§€λ§Œ .then() λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ” ν•œ 이 κ²½κ³ λ₯Ό 받지 μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€. μ½”λ“œμ—μ„œ .then() λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•Šκ³  이 κ²½κ³ κ°€ ν‘œμ‹œλ˜λ©΄ λͺ½κ΅¬μŠ€κ°€ ν•΄μ„œλŠ” μ•ˆ λ˜λŠ” κ³³μ—μ„œ 약속을 μ‚¬μš©ν•˜κ³  μžˆλ‹€λŠ” μ˜λ―Έμ΄λ―€λ‘œ μ½”λ“œ μƒ˜ν”Œκ³Ό ν•¨κ»˜ λ³„λ„μ˜ 문제λ₯Ό μ—¬μ‹­μ‹œμ˜€.+1:

IMHO, 이 λ©”μ‹œμ§€λŠ” μ‹€μ œλ‘œ μ½œλ°±μ—μ„œ 였λ₯˜λ‘œ λ°˜ν™˜λ˜κΈ° λ•Œλ¬Έμ— κ²½κ³ ("μ£Όμ˜ν•˜μ§€λ§Œ μž‘λ™ν•΄μ•Ό 함")κ°€ μ•„λ‹ˆλΌ 였λ₯˜("일이 μž‘λ™ν•˜μ§€ μ•ŠμŒ")μ—¬μ•Ό ν•©λ‹ˆλ‹€.

이 λ¬Έμ œμ— λΆ€λ”ͺμ³€κ³  aModel.save() λ©”μ†Œλ“œκ°€ MongoDB에 넣지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. 이 문제의 κ·Όλ³Έ 원인을 νŒŒμ•…ν•˜λŠ” 데 μ‹œκ°„μ΄ μ’€ κ±Έλ ΈμŠ΅λ‹ˆλ‹€. "mongoose.Promise = global.Promise;"λ₯Ό μ μš©ν•œ ν›„ μ„±κ³΅ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” "λͺ½κ΅¬μŠ€": "^4.5.9"λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

SaveλŠ” κΈ°λ³Έ promise libμ—μ„œ 잘 μž‘λ™ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ½”λ“œ μƒ˜ν”Œμ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

@vkarpov15

λ„€κ°€ μ˜³μ•„. 방금 경고와 ν•¨κ»˜ 차단 μ €μž₯ κ²°κ³Όλ₯Ό μ²˜μŒλΆ€ν„° λ‹€μ‹œ λ§Œλ“€λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚΄ ν”„λ‘œμ νŠΈμ˜ λ‹€λ₯Έ μ½”λ“œμ™€ 관련이 μžˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν™•μΈν•˜λŠ” μ‹œκ°„μ΄ ν•„μš”ν•©λ‹ˆλ‹€. 원인을 μ°ΎκΈ° 전에 λ¬΄μ‹œν•˜μ‹­μ‹œμ˜€.

μ €λ₯Ό μœ„ν•΄ 이 λ‘œκ·ΈλŠ” .then()을 μ‚¬μš©ν•  λ•Œλ§ˆλ‹€ μ½˜μ†”μ— λ‚˜νƒ€λ‚©λ‹ˆλ‹€. mongoose 객체 λ˜λŠ” mongoose와 관련이 μ—†λŠ” λ‹€λ₯Έ 객체와 ν•¨κ»˜ μ‚¬μš©λ˜λŠ”μ§€ μ—¬λΆ€λŠ” μ€‘μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ, λ¬Έμ„œ 에 λ”°λ₯΄λ©΄, λ‚˜λŠ” μ „λ‹¬ν•©λ‹ˆλ‹€

'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'); λŠ” _μ•„λ‹ˆλ‹€_ μ˜³μŠ΅λ‹ˆλ‹€.

@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 μ˜΅μ…˜μ΄ mongoose λͺ¨λΈμ΄ μ•„λ‹Œ κΈ°λ³Έ mongodb λ“œλΌμ΄λ²„μ—λ§Œ 영ν–₯을 λ―ΈμΉœλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

@zubair-farooqui-10p μ•„λž˜ μŠ€ν¬λ¦½νŠΈλŠ” 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;

이 μΆ”κ°€ 쀄을 μΆ”κ°€ν•΄μ•Ό ν•˜λŠ” 것은 정말 μ§œμ¦λ‚˜λŠ” μΌμž…λ‹ˆλ‹€. λͺ½κ΅¬μŠ€κ°€ λ‚΄λΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 이λ₯Ό κ³ μΉ  수 μžˆλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ? 감사 ν•΄μš”!

일반적으둜 mongoose의 promise lib μ „ν™˜ λ©”μ»€λ‹ˆμ¦˜μ΄ μž‘λ™ν•˜λŠ” 방식은 mongodb λ“œλΌμ΄λ²„μ˜ 방식과 μƒλ‹Ήνžˆ λ‹€λ₯΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. mongooseμ—μ„œλŠ” mongoose μ „μ—­ κ°œμ²΄μ— μ–Έμ œλ“ μ§€ μ„€μ •ν•  수 μžˆλŠ” 속성일 λΏμ΄μ§€λ§Œ mongodb λ“œλΌμ΄λ²„μ—μ„œλŠ” μ—°κ²° μ˜΅μ…˜μ΄λ―€λ‘œ μ—°κ²°λ§ˆλ‹€ λ‹€λ₯Έ promise λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μžˆμ„ 수 μžˆμ§€λ§Œ μ—°κ²°ν•  λ•Œλ§Œ promise 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...

λ„€, κ·Έλ ‡κ²Œ ν•΄μ•Ό ν•©λ‹ˆλ‹€. Mongoose 4.xλŠ” μ‚¬μš©μžκ°€ λ§ν•˜μ§€ μ•Šμ„ λ•ŒκΉŒμ§€ mpromiseλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

쿼리 λ„μš°λ―Έμ™€ ν•¨κ»˜ 일반 find() ν˜ΈμΆœμ„ μ‚¬μš©ν•  λ•Œ 이것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 어디에도 then λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

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

ν†΅λ‚˜λ¬΄:

λͺ½κ΅¬μŠ€: bookstores.find({ μœ„μΉ˜: { '$near': [ 28.742712943610545, -13.865369983731426 ], '$maxDistance': ), μ •μ˜λ˜μ§€ μ•ŠμŒ: 0.001255689844608}817 ν•„λ“œ

(node:82366) DeprecationWarning: Mongoose: mpromise(mongoose의 κΈ°λ³Έ promise 라이브러리)λŠ” 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  μžμ‹ μ˜ promise 라이브러리λ₯Ό μ—°κ²°ν•˜μ„Έμš”. http://mongoosejs.com/docs/promises.html

@pronebird λΆˆν–‰νžˆλ„ 이것이 exec() κ°€ λ‚΄λΆ€μ μœΌλ‘œ μž‘λ™ν•˜λŠ” 방식이며 exec() 에 λŒ€ν•œ μ½œλ°±μ€ μ‹€μ œλ‘œ 약속을 κ±°μΉ©λ‹ˆλ‹€. mongoose.Promise = global.Promise ν•˜λ©΄ 더 이상 κ²½κ³ κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@pronebird κ²Œμ‹œν•  λ•Œ λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν–ˆκ³  λ‚΄ μŠ€ν‚€λ§ˆμ— μ•„λž˜μ™€ 같은 기본값이 있고 κ²Œμ‹œλœ κ°’κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€.
μ—­ν• : {
μœ ν˜•: λ¬Έμžμ—΄,
μ—΄κ±°ν˜•: ['ν΄λΌμ΄μ–ΈνŠΈ', 'κ΄€λ¦¬μž'],
κΈ°λ³Έκ°’: 'ν΄λΌμ΄μ–ΈνŠΈ'
}
λ‚˜λŠ” μ—­ν• :admin 을 κ²Œμ‹œν•˜κ³  Admin이어야 ν•©λ‹ˆλ‹€.
이 닡변이 λˆ„κ΅°κ°€λ₯Ό 돕기λ₯Ό λ°”λžλ‹ˆλ‹€. 감사

@Muhammedalbayati κ·€ν•˜μ˜ λ¬Έμ œκ°€μ΄ νŠΉμ • λ¬Έμ œμ™€ 관련이 μžˆλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? 그것은 단지 약속에 κ΄€ν•΄ λͺ½κ΅¬μŠ€κ°€ λ°œν–‰ν•œ 경고일 λΏμž…λ‹ˆλ‹€.

@varunjayaraman λ‹Ήμ‹  말이 λ§žμ•„, λ‚˜λŠ” λ‹€μŒμ„ μ–ΈκΈ‰ν•΄μ•Όν•©λ‹ˆλ‹€
κ²½κ³ 
DeprecationWarning: Mongoose: mpromise(mongoose의 κΈ°λ³Έ ν”„λΌλ―ΈμŠ€ 라이브러리)λŠ” 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  κ³ μœ ν•œ ν”„λΌλ―ΈμŠ€ 라이브러리λ₯Ό μ—°κ²°ν•˜μ„Έμš”. http://mongoosejs.com/docs/promises.html

mongoose.Promise = global.Promiseλ₯Ό μΆ”κ°€ν•˜λ©΄ μ‚¬λΌμ§‘λ‹ˆλ‹€. db에 μ ‘μ†ν•˜κΈ° 전에
mongoose.connect('mongodb://localhost:27017/mydb');

@Muhammedalbayati @vkarpov15 κ°€ 이 κ²½κ³ κ°€ λ‚˜νƒ€λ‚˜λŠ” 이유λ₯Ό μ„€λͺ…ν–ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λͺ½κ΅¬μŠ€λŠ” exec λ‚΄μ—μ„œ λ‚΄λΆ€μ μœΌλ‘œ promiseλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

ES6 "yiled"λŠ” mongooseλ₯Ό v.4.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] μ—λŠ” 자체 promise λͺ¨λ“ˆμ΄ μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. λ§žλ‚˜μš”??
아무도 그것을 μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

λͺ½κ΅¬μŠ€λŠ” es6-promise 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 μ•±μ˜ λ‹€λ₯Έ κ³³μ—μ„œ λͺ½κ΅¬μŠ€λ₯Ό κ°€μ Έμ˜€κ³  μžˆμŠ΅λ‹ˆκΉŒ? mongooseκ°€ 처음 μ‚¬μš©λ˜λŠ” κ²ƒμž…λ‹ˆκΉŒ μ•„λ‹ˆλ©΄ 이 νŒŒμΌμ„ λ‹€λ₯Έ 파일둜 κ°€μ Έμ˜€λŠ” κ²ƒμž…λ‹ˆκΉŒ?

λ˜ν•œ μ–΄λ–€ λ²„μ „μ˜ mongoose/nodeλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

@varunjayaraman 이 νŒŒμΌμ€ λ‹€λ₯Έ κ³³μ—μ„œ κ°€μ Έμ˜€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ user.js μŠ€ν‚€λ§ˆ νŒŒμΌμ—μ„œ mongooseλ₯Ό κ°€μ Έμ˜¨ λ‹€μŒ 일뢀 ν…ŒμŠ€νŠΈμ—μ„œ ν•΄λ‹Ή μ‚¬μš©μž μŠ€ν‚€λ§ˆλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

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" 와 같은 ν•­λͺ©μ΄ μžˆμ§€λ§Œ μ΄λŸ¬ν•œ λͺ¨λ“ˆμ€ 맀년 μ—…λ°μ΄νŠΈλ˜κΈ° λ•Œλ¬Έμ—(μ „ν˜€ μžˆλŠ” 경우) Promise ꡬ성 뢀뢄이 λΆ€μ‘±ν•©λ‹ˆλ‹€. @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

약속이 μž¬μ •μ˜λ˜μ§€ μ•Šμ€ λͺ½κ΅¬μŠ€ μΈμŠ€ν„΄μŠ€μ—μ„œ λͺ¨λΈμ„ μƒμ„±ν•˜λ©΄ 이 λͺ¨λΈμ— λŒ€ν•œ λͺ¨λ“  μΏΌλ¦¬μ—μ„œ κ²½κ³ κ°€ λ°œμƒν•©λ‹ˆλ‹€.

@Spawn

μ μ ˆν•œ μ‹œκΈ°μ— 이 μŠ€λ ˆλ“œμ—μ„œ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 정보λ₯Ό μ €μž₯ν•  λ•Œλ§ˆλ‹€ λ™μΌν•œ κ²½κ³ λ₯Ό λ°›μ•˜μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λͺ½κ΅¬μŠ€μ˜ μΈμŠ€ν„΄μŠ€μ—μ„œ λͺ¨λΈμ„ λ§Œλ“€κ³  μžˆμ—ˆκ³  그것을 μž¬μ •μ˜ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. bluebirdκ°€ ν•„μš”ν•˜κ³  mongoose.Promise둜 μ„€μ •ν•˜λ©΄ 였λ₯˜ λ©”μ‹œμ§€κ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

정말 κ³ λ§ˆμ›Œ!

@Spawn κ°μ‚¬ν•©λ‹ˆλ‹€ μ„ μƒλ‹˜! 그것이 λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. ν₯λ―Έλ‘­κ²Œλ„ μ €λŠ” 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)

약속을 μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€(TypeScriptλ₯Ό μ‚¬μš©ν•˜κ³  있음).

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

μ–΄λ–€ 아이디어? "μ±„μšΈ 수 μžˆλŠ”" 가상을 μ‚¬μš©ν•˜λŠ” λͺ¨λ“  λͺ¨λΈμ— 약속을 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆκΉŒ? μž μ‹œλ§Œμš”. μ‹€μ œλ‘œ μ‹œλ„ν•΄ 보고 μ–΄λ–»κ²Œ λ˜μ—ˆλŠ”μ§€ λ‹€μ‹œ μ•Œλ €λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

μ’‹μ•„, μ•½κ°„μ˜ λ•œμ§ˆ 후에, λ‚΄ μ„œλ²„μ˜ index 에 μ„€μ •ν•œ κ²½μš°μ—λ„ μ—¬μ „νžˆ λ‚΄ μŠ€ν‚€λ§ˆμ— Promise λ₯Ό μ„€μ •ν•΄μ•Ό ν•œλ‹€λŠ” 것을 μ•Œμ•„λƒˆμŠ΅λ‹ˆλ‹€.

제 κ²½μš°μ—λŠ” website_pages μ»¬λ ‰μ…˜μ΄ λ‚΄ μ‹œμŠ€ν…œμ—μ„œ 쿼리λ₯Ό 받은 첫 번째 μ»¬λ ‰μ…˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€. 이 μŠ€ν‚€λ§ˆμ—μ„œλ§Œ mongoose.Promise λ₯Ό global.Promise 둜 μ„€μ •ν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμœΌλ©° μ €λŠ” λͺ¨λ“  μŠ€ν‚€λ§ˆμ—μ„œ μ„€μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

ES6 Promiseλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? 이제 λͺ¨λ“  κ³³μ—μ„œ μ‚¬μš©ν•  수 μžˆμ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

mongoose.Promise = Promise; // eh?

@Spown 덕뢄에 λͺ¨λΈμ„ κ°€μ Έμ˜¨ ν›„ mongoose.Promise = global.Promise λ₯Ό λ„£μ—ˆκΈ° λ•Œλ¬Έμ— λ™μΌν•œ μ‚¬μš© 쀑단 경고에 μ§λ©΄ν–ˆμŠ΅λ‹ˆλ‹€. 이제 μ‚¬μš© 쀑단 κ²½κ³ κ°€ μ‚¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€.

@Spown 이 μ–ΈκΈ‰ν•œ λŒ€λ‘œ λͺ¨λΈ νŒŒμΌμ—μ„œ mongoose.Promise = global.Promise λ₯Ό μ„ μ–Έν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€. 이것은 λ…Έλ“œμ˜ ν•„μˆ˜ λͺ¨λ“ˆ 캐싱 λ•Œλ¬Έμž…λ‹ˆλ‹€. 이것은 λ³€λ•μŠ€λŸ¬μ›Œ λ³΄μ΄μ§€λ§Œ. 이 νŒŒμΌμ— mongoose의 promise ν•¨μˆ˜λ₯Ό μ„€μ •ν•  수 μžˆλ„λ‘ test_helpers.js κ°€ λ¨Όμ € λ‘œλ“œλ˜λ„λ‘ ν•˜λŠ” 방법이 μ—†μ„κΉŒμš”?

보μž₯ν•  방법이 μ—†μ„κΉŒμš”...

개인적으둜 λ‚˜λŠ” require mongooseλ₯Ό λ‚΄ ν”„λ‘œμ νŠΈμ—μ„œ ν•œ 번만 μˆ˜ν–‰ν•œ λ‹€μŒ μ „μ—­ Singleton κ°œμ²΄μ— λ„£κ³  λͺ¨λ“  DB λͺ©μ μœΌλ‘œ λͺ¨λ“  κ³³μ—μ„œ μ‚¬μš©ν•©λ‹ˆλ‹€. μ •ν™•νžˆ μš°μ•„ν•˜μ§€λŠ” μ•Šμ§€λ§Œ λŒ€λΆ€λΆ„ λ°©νƒ„μž…λ‹ˆλ‹€. μ‚¬μš©μž 지정 연결을 μ‚¬μš©ν•˜λŠ” 경우($ mongoose.connect() mongoose.createConnection() λ₯Ό 톡해 μ—°κ²°) - λͺ¨λΈμ„ 생성해야 ν•˜κΈ° λ•Œλ¬Έμ— μ‚¬μš© μ€‘λ‹¨λ˜κΈ° 훨씬 전에 이 μž‘μ—…μ„ μˆ˜ν–‰ν•΄ μ™”μŠ΅λ‹ˆλ‹€. 이 연결에 μ—°κ²°λœ λͺ½κ΅¬μŠ€ μΈμŠ€ν„΄μŠ€μ—μ„œ. 그렇지 μ•ŠμœΌλ©΄ μ„±κ°€μ‹  경고보닀 훨씬 더 λ‚˜μœ μ „ν˜€ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

예, @Spownκ³Ό λ™μΌν•©λ‹ˆλ‹€. ν™•μ‹€νžˆ μ΄μƒμ μ΄μ§€λŠ” μ•Šμ§€λ§Œ mpromiseλ₯Ό μ™„μ „νžˆ μ‚¬μš©ν•˜μ§€ μ•Šμ„ 수 μžˆλŠ” λ‹€μŒ μ£Όμš” λ¦΄λ¦¬μŠ€κΉŒμ§€ mongooseλ₯Ό 이전 버전과 ν˜Έν™˜λ˜λ„λ‘ μœ μ§€ν•˜λŠ” μœ μΌν•œ λ°©λ²•μž…λ‹ˆλ‹€.

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);

λͺ¨λΈ/μ‚¬μš©μž.js

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

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

@howard require() 호좜이 μΊμ‹œλ©λ‹ˆλ‹€.

λ”°λΌμ„œ μ˜¬λ°”λ₯΄κ²Œ μ΄ν•΄ν–ˆλ‹€λ©΄ ν•œ κ³³μ—μ„œλ§Œ μˆ˜ν–‰ν•˜λŠ” λŒ€μ‹  λͺ¨λ“  μŠ€ν‚€λ§ˆ μ„ μ–Έ 전에 약속을 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€(예: 색인 파일 λ˜λŠ” μ—°κ²° μ„€μ • μœ„μΉ˜).
이것은 쒋은 μŠ΅κ΄€μ΄ μ•„λ‹ˆλ©° λ‹€μŒκ³Ό 같은 ν•¨μˆ˜λ‘œ λ³€κ²½ν•˜λŠ” 것을 κ³ λ €ν•΄ λ³Ό κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.
mongoose.setPromise(global.Promise);

@sh-guti 제 μƒκ°μ—λŠ” 같은 λ¬Έμ œκ°€ μžˆμ—ˆκ³  κ·Έ μ½”λ“œκ°€ 그것을 ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

이 μ‹œμ μ—μ„œ μ½œλ°±μ΄λ‚˜ 약속을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. γ…‹ γ…‹ γ…‹.

μ‚¬μš©

mongoose.createConnection(URI)

μ™œ 지ꡬ λͺ½κ΅¬μŠ€λŠ” λ„€μ΄ν‹°λΈŒ ν”„λΌλ―ΈμŠ€μ˜ 쑴재λ₯Ό κ±°λΆ€ν•˜κ³  μ¦‰μ‹œ μ‚¬μš©ν•  수 μ—†λŠ”μ§€ μ„€λͺ…ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±. Mongoose 4.xλŠ” λ…Έλ“œ 4κ°€ μΆœμ‹œλ˜κΈ° 전에 1λ…„ λ„˜κ²Œ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ μ—­λ°©ν–₯ μ£Όμš” 릴리슀둜 μ „ν™˜ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ–Έμ œκ°€ λ κΉŒμš”?

mongoose.createConnection(URI) 은 Mongoose μ—μ„œ 맀우 μ΄μƒν•œ 버그λ₯Ό μΌμœΌν‚΅λ‹ˆλ‹€ . 쿼리가 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 디버깅 μ‹œκ°„μ΄ μžˆμŠ΅λ‹ˆλ‹€. κ²°κ΅­ λ‹€μ‹œ κ°”λ‹€

mongoose.connect(process.env.MONGODB); mongoose.createConnection(process.env.MONGODB)μ—μ„œ

참고둜 감가상각 κ²½κ³ λ₯Ό μ€‘μ§€ν–ˆμ§€λ§Œ λͺ¨λ“  μž‘λ™μ„ μ€‘μ§€ν–ˆμŠ΅λ‹ˆλ‹€ ...

@MickL μ•žμœΌλ‘œ λͺ‡ μ£Ό μ•ˆμ— rc0이 λ‚˜μ˜¬ μ˜ˆμ •μž…λ‹ˆλ‹€. νŠΈμœ„ν„°μ—μ„œ mongooseλ₯Ό νŒ”λ‘œμš°ν•˜κ±°λ‚˜ slack 채널에 κ°€μž…ν•˜μ—¬ μ—…λ°μ΄νŠΈλ₯Ό λ°›μœΌμ„Έμš”.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰