Mongoose: DeprecationWarning : Mongoose : mpromise (mongoose의 κΈ°λ³Έ promise 라이브러리)λŠ” 4.8.0 및 4.8.1μ—μ„œ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 02μ›” 02일  Β·  37μ½”λ©˜νŠΈ  Β·  좜처: Automattic/mongoose

mongoose 버전 4.8.0 및 4.8.1 (λ…Έλ“œ 버전은 6.9.5이고 MongoDB 버전은 3.2.11)μ—μ„œλŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ‹œμž‘ν•œ ν›„ λ¬Έμ„œλ₯Ό 처음 μ €μž₯ν•  λ•Œ λ‹€μŒ κ²½κ³ κ°€ μƒμ„±λ©λ‹ˆλ‹€ (λ‹€μŒκ³Ό 같은 κ²½μš°μ—λŠ” κ²½κ³ κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμŒ). μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ 계속 μ‹€ν–‰λ˜λŠ” λ™μ•ˆ 처음으둜 λ™μΌν•œ μ½”λ“œκ°€ 이후에 μ‹€ν–‰λ˜μ§€λ§Œ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ λ‹«μ•˜λ‹€κ°€ λ‹€μ‹œ μ‹œμž‘ν•˜λ©΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ‹œμž‘λœ ν›„ 처음으둜 λ¬Έμ„œ μ €μž₯이 λ°œμƒν•˜λ©΄ κ²½κ³ κ°€ μƒμ„±λ©λ‹ˆλ‹€.

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

mongoose 버전 4.7.9 및 이전 λ²„μ „μ—μ„œ λ˜‘κ°™μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλ₯Ό μ‚¬μš©ν•  λ•ŒλŠ”μ΄ λ¬Έμ œκ°€ λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λͺ½κ΅¬μŠ€ 연결을 μ„€μ •ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

`// Set up mongoose and DB connection
 var mongoose = require('mongoose');
 mongoose.Promise = require('bluebird');
 mongoose.connect('mongodb://localhost:27017/basedir', {server: { poolSize: 5 }});`
help wanted needs clarification

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

지원 쀑단 κ²½κ³  μˆ˜μ • 방법 :

var mongoose = require('mongoose');

mongoose.Promise = global.Promise;
var schema = new mongoose.Schema({
 // definition
}, {
 // options
});

module.exports = mongoose.model('foobar', schema);

λͺ¨λ“  37 λŒ“κΈ€

μ‹€μ œλ‘œ 였λ₯˜λ₯Ό μƒμ„±ν•˜λŠ” μ½”λ“œλ₯Ό λΆ™μ—¬ 넣을 수 μžˆμŠ΅λ‹ˆκΉŒ? 아직 약속을 μ‚¬μš©ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή μ½”λ“œκ°€ μ•„λ‹™λ‹ˆλ‹€ (κ²Œμ‹œ ν•œ μ—°κ²° 슀 λ‹ˆνŽ«μ΄ κ²½κ³ λ₯Ό μƒμ„±ν•œλ‹€κ³  λ§ν•˜μ§€ μ•ŠλŠ” ν•œ).

μ—°κ²° 슀 λ‹ˆνŽ«μ€ κ²½κ³ λ₯Ό μƒμ„±ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€μŒ newuser μ €μž₯ 슀 λ‹ˆνŽ«μ€ κ²½κ³ λ₯Ό μƒμ„±ν•˜λŠ” μ½”λ“œμ΄μ§€λ§Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹œμž‘λœ ν›„ μ½”λ“œκ°€ 처음 싀행될 λ•Œλ§Œ ν•΄λ‹Ήλ©λ‹ˆλ‹€ (λ‹€μ‹œ λ§ν•˜μ§€λ§Œ mongoose 버전 4.7.9 및 이전 λ²„μ „μ—μ„œλŠ” κ²½κ³ κ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ).

 `                       var curDate = new Date();

                         var newuser = new user(
                         {                             
                                "userName": userName,
                                "hashed_password": hashed_password,
                                "emailReg": false,
                                "email": "~",
                                "firstName": "",
                                "lastName": "",
                                "address.streetAddress": "",
                                "address.city": "",
                                "address.state": "",
                                "address.postalCode": "",
                                "phoneNumbers": [],
                                "accessLevel": 2,
                                "active": true,
                                "trialStartDate": curDate,
                                "maxStorageByteLimit": constants.maxStorageBytesPerUser,
                                "signUpDate": curDate,
                                "passwordResetDate": curDate,
                                "salt": temp,
                                "storageBytesUsed": 0
                            });

                        if (phoneNumberValid != false)
                        {
                            newuser.phoneNumbers.push({
                                "type": "mobile",
                                "number": contactPhoneNumber,
                                "primary": true
                            });
                        }

                        wlogger.crit("Create new user by UserName: " + userName);

                        newuser.save(function (err)
                        {
                            if (err)
                            {
                                wlogger.error(err + " - when saving user "
                                    + " creation by UserName: " + userName);
                                callback({
                                    "response": false,
                                    "res": "User creation failed. "
                                    + " Please try again or contact us at [email protected]"
                                });
                            }
                            else
                            {
                                wlogger.crit("Saved new user info for UserName: "
                                    + userName);

                                return callback({
                                        "response": true,
                                        "res": "Created user by User Name " + userName,
                                        "user_id": newuser._id,
                                        "last_modified_date": curDate
                                });
                            }
                        })`

μ‚¬μš©μž μŠ€ν‚€λ§ˆλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

`var userSchema = mongoose.Schema({ 
token : String,
email: String,
userName: String,
deviceId: String,
devicePhoneNumber: String, 
hashed_password: String, 
hashed_admin_code: String,
maxStorageByteLimit: { type: Number, default: 1073741824 },
accessLevel: { type: Number, default: 2 },
lastAccessType: Number,
storageBytesUsed: { type: Number, default: 0 },
totalStorageBytesUsed: { type: Number, default: 0 },
deletedStorageBytesUsed: { type: Number, default: 0 },
salt : String,
salt1 : String,
temp_str: String,
syncInProcess: { type: Boolean, default: false },
syncStartDate: { type: Date, default: Date.now },
syncVersion : { type: Number, default: 0 },
active: { type: Boolean, default: false },
disabled: { type: Boolean, default: false },
emailReg: { type: Boolean, default: false },
regPending: { type: Boolean, default: false },
emailChangePending: { type: Boolean, default: false },
regCodeSendCount: { type: Number, default: 0 },
trialStartDate: Date,
signUpDate: Date,
passwordResetDate: Date,
lastLoginDate: Date,
lastModifiedDate: Date,
curLoginDate: Date,
apnDeviceTokens: [ String ],
curSessionIds: [ String ],
curIpAddr: { ipType: String, 
    upper64: Schema.Types.Long,
    lower64: Schema.Types.Long },
firstName: String,
lastName: String,
address: { streetAddress: String,
    city: String,
    state: String, postalCode: String },
phoneNumbers: [ phoneNumbersSchema ],
categories: [ categoriesSchema ],
providerCustomers: [ customerSchema ],
serviceProviders: [ providerSchema ],
ipAddrs: [ ipAddrSchema ],
recentUploads: [ recentUploadSchema ],
recentUploadsGizmo: [ recentUploadSchema ],
recentUploadsLife: [ recentUploadSchema ],
recentUploadsVehicle: [ recentUploadSchema ],
recentUploadsMisc: [ recentUploadSchema ],
recentViews: [ recentViewsSchema ],
recentAdds: [ recentAddsSchema ],
recentAddedFiles: [ recentAddedFilesSchema ],
locations: [ locationSchema ],
inMessages: [ inMessageSchema],
outMessages: [ outMessageSchema ]
  });`

mongoose v4.8.1 및 node.js v7.5.0μ—μ„œλ„ λ™μΌν•œ 문제λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

mongoose.Promise = global.Promise;
mongoose.connect(db.mongodb.uri, db.mongodb.options);
DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html

@ stevenelson74708 슀 λ‹ˆνŽ«μ„ μ£Όμ…”μ„œ κ°μ‚¬ν•˜μ§€λ§Œ μŠ€ν‚€λ§ˆ μžμ²΄λŠ” μ•„λ§ˆλ„ λ¬Έμ œκ°€ 아닐 κ²ƒμž…λ‹ˆλ‹€. λ‚΄κ°€ 더 μ°Ύκ³ μžˆλŠ” 것은 연결이 열릴 λ•Œ / mongoose Promise μƒμ„±μžκ°€ μ„€μ •λ˜μ—ˆμ„ λ•Œ μŠ€ν‚€λ§ˆλ₯Ό κ°€μ Έμ˜€κ³  μ‚¬μš©ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

μŠ€ν‚€λ§ˆλŠ” λ‹€μŒκ³Ό 같이 μ„ μ–Έ 된 μŠ€ν‚€λ§ˆ νŒŒμΌμ—μ„œ λ‚΄λ³΄λ‚΄μ§‘λ‹ˆλ‹€.

`module.exports = mongoose.model('users', userSchema);   `

μŠ€ν‚€λ§ˆλŠ” newuser.saveκ°€ λ‹€μŒκ³Ό 같이 ν˜ΈμΆœλ˜λŠ” κ³³μ—μ„œ μ‚¬μš©λ˜λŠ” 파일둜 κ°€μ Έμ˜΅λ‹ˆλ‹€.

`var user = require('config/models/users');`

첫 번째 κ²Œμ‹œλ¬Όμ— ν‘œμ‹œλœ μ—°κ²° 슀 λ‹ˆνŽ« (연결이 μ—΄λ € 있고 mongoose Promise μƒμ„±μžκ°€ μ„€μ • 됨)은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ 쀑 μ΄ˆκΈ°ν™”μ‹œ μ‹€ν–‰λ˜λŠ” app.js νŒŒμΌμ—μ„œ λ°œμƒν•©λ‹ˆλ‹€.

두 번째 κ²Œμ‹œλ¬Όμ— ν‘œμ‹œλœ newuser.save 슀 λ‹ˆνŽ«μ€ μ‚¬μš©μž μŠ€ν‚€λ§ˆλ₯Ό κ°€μ Έμ˜¨ νŒŒμΌμ—μ„œ μ‹€ν–‰λ˜κ³  newuser.saveλŠ” μ‚¬μš©μžκ°€ μ‘μš© ν”„λ‘œκ·Έλž¨κ³Ό μƒν˜Έ μž‘μš©ν•˜μ—¬ νŠΉμ • κ²½λ‘œκ°€ μ‹€ν–‰λ˜λ„λ‘ ν•  λ•Œ μ‹€ν–‰λ©λ‹ˆλ‹€. μ™„λ£Œλ˜μ—ˆλ‹€.

이 κ²½κ³ λŠ” μ‹œμž‘ ν›„ λ™μΌν•œ newuser.save μ½”λ“œκ°€ μ—¬λŸ¬ 번 μ‹€ν–‰ λ˜λ”λΌλ„ μ‘μš© ν”„λ‘œκ·Έλž¨ μ‹œμž‘ ν›„ newuser.save μ½”λ“œκ°€ 처음 싀행될 λ•Œλ§Œ λ°œμƒν•˜λ©° mongoose 버전 4.7.9 및 이전 λ²„μ „μ—μ„œλŠ” κ²½κ³ κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€.

@ stevenelson74708 μ•± μ‹œμž‘μ— μ€‘μš”ν•œ μ—­ν• μ„ν•˜λŠ” λͺ¨λ“  ꡬ성 μš”μ†Œλ₯Ό ν™•μΈν•΄μ•Όν•©λ‹ˆλ‹€. λ§Žμ€ μ‚¬λžŒλ“€μ΄ μ΅œκ·Όμ— κ΄€ν•œ 문제λ₯Ό μ—΄μ—ˆμŠ΅λ‹ˆλ‹€, 그리고 λ‚΄ 생각 μ—” 당신이 μ„€μ • ν•œ μˆœμ„œλŒ€λ‘œ λ­”κ°€ 잘λͺ»ν•˜κ³ μžˆμ–΄λ˜λ„둝 λͺ¨λ“  ν•˜λ‚˜ ν•˜λ‚˜κ°€ 잘λͺ» 약속 μƒμ„±μžλ₯Ό μ„€μ • λ§‰μ•„μ•Όν–ˆλ‹€ mongoose.Promise .

μ½”λ“œλ₯Ό λ³Ό μˆ˜μžˆλŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

λ‹€μŒμ€ mongoose.Promise 섀정을 ν¬ν•¨ν•˜μ—¬ mongoose ꡬ성과 κ΄€λ ¨λœ app.js μ΄ˆκΈ°ν™”μ˜ λͺ¨λ“  μ½”λ“œ (μ •ν™•ν•œ μˆœμ„œ)μž…λ‹ˆλ‹€. μ΄ˆκΈ°ν™” μ½”λ“œκ°€ 싀행될 λ•Œ κ²½κ³ κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ²½κ³ λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ΄ˆκΈ°ν™” 된 ν›„ newuser.save μ½”λ“œ (이전 κ²Œμ‹œλ¬Όμ— ν‘œμ‹œλ¨)κ°€ 처음 싀행될 λ•Œλ§Œ λ°œμƒν•©λ‹ˆλ‹€. κ²½κ³ λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•ŠλŠ” μ €μž₯ 전에 μ‹€ν–‰λ˜λŠ” findOneAndUpdate 호좜이 μžˆμœΌλ―€λ‘œ κ²½κ³ λ₯Ό λ°œμƒμ‹œν‚€λŠ” 것은 μ €μž₯ κΈ°λŠ₯ 뿐인 κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

λͺ½κ΅¬μŠ€ ꡬ성은 μ΄ˆκΈ°ν™”μ—μ„œ κ°€μž₯ λ¨Όμ € λ°œμƒν•˜λŠ” 것 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. λͺ½κ΅¬μŠ€ ꡬ성은 createServer κΈ°λŠ₯ 이후와 같은 μ΄ˆκΈ°ν™”μ—μ„œ λ‚˜μ€‘μ— λ°œμƒν•΄μ•Όν•©λ‹ˆκΉŒ?

λ‹€μ‹œ λ§ν•˜μ§€λ§Œ, mongoose 버전 4.7.9 및 이전 λ²„μ „μ—μ„œλŠ” κ²½κ³ κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

`// Set up mongoose and DB connection
var mongoose = require('mongoose');

mongoose.Promise = require('bluebird');
mongoose.connect('mongodb://localhost:27017/basedir', {server: { poolSize: 5 }});
var conn = mongoose.connection;

conn.once('open', function ()
{
    wlogger.info("Mongoose connection opened on process " + process.pid);
});`

μ•„λ‹ˆμš”, ꡬ성이 λ¨Όμ € 올 수 μžˆμŠ΅λ‹ˆλ‹€. 이 파일이 μ•±μ˜ μ§„μž… μ μž…λ‹ˆκΉŒ, μ•„λ‹ˆλ©΄μ΄ μ•žμ— μ˜€λŠ” 파일이 μžˆμŠ΅λ‹ˆκΉŒ?

app.js νŒŒμΌμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ§„μž… μ μž…λ‹ˆλ‹€. λͺ…λ Ή 쀄에 node app.jsλ₯Ό μž…λ ₯ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 호좜 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

mongoose 4.8.1 및 node 7.5.0κ³Ό λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ˜ν•œ Typescriptλ₯Ό μ‚¬μš©ν•˜κ³  있으며 약속을 μœ„ν•΄ Bluebirdλ₯Ό μ—°κ²°ν•˜λ €κ³ ν•©λ‹ˆλ‹€. 이 μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λ©΄ κ²½κ³ κ°€ μ‚¬λΌμ§„λ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€.

`import * as mongoose from 'mongoose';
 import * as bluebird from 'bluebird';

 (<any>mongoose).Promise = bluebird;`

'λͺ½κ΅¬μŠ€'μ—μ„œ 무언가λ₯Ό κ°€μ Έ μ˜€λŠ” λͺ¨λ“  νŒŒμΌμ—μ„œ. λ”°λΌμ„œ μ§„μž… 점 νŒŒμΌμ—μ„œλ§Œ λŒ€μ‹  λͺ¨λ“  λͺ¨λΈ 파일 (λ‚΄ μŠ€ν‚€λ§ˆλ₯Ό μ •μ˜ν•˜λŠ” 파일)μ—μ„œμ΄λ₯Ό μˆ˜ν–‰ν•΄μ•Όν•©λ‹ˆλ‹€.

// Set up mongoose and DB connection
var mongoose = require('mongoose');

mongoose.Promise = require('bluebird');
mongoose.connect('mongodb://localhost:27017/basedir', {server: { poolSize: 5 }});
var conn = mongoose.connection;

conn.once('open', function ()
{
    console.log('test');
});

이 κ²½κ³ λ₯Ό μΈμ‡„ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λ‹€λ₯Έ 것이 μžˆμŠ΅λ‹ˆλ‹€.

@vladimirdjurdjevic 이것은 약속 libλ₯Ό μ„€μ •ν•˜κΈ° 전에 λͺ½κ΅¬μŠ€ 비동기 μž‘μ—…μ„ μ‚¬μš©ν•˜κ³  μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. λ‚˜λŠ” TSλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 그것이 그것과 관련이 μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

μœ„μ™€ 같이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ§„μž… 점 인 app.js νŒŒμΌμ—μ„œ μœ„μ™€ 같이 promise libλ₯Ό μ„€μ • ν•œ λ‹€μŒ, μœ„μ™€ 같이 첫 번째 newuser.saveλ₯Ό μˆ˜ν–‰ν•˜λ©΄ (promise libκ°€ μ„€μ •λœ ν›„ 였래) κ²½κ³ κ°€ λ°œμƒν•©λ‹ˆλ‹€. newuser.saveλŠ” λ°œμƒν•˜λŠ” 첫 번째 λͺ½κ΅¬μŠ€ 비동기 μž‘μ—…μ΄μ§€λ§Œ 연결에 λŒ€ν•΄ libκ°€ μ„€μ •λœ 약속 이후에 λ°œμƒν•©λ‹ˆλ‹€.

λͺ½κ΅¬μŠ€ 연결이 ꡬ성 될 λ•Œ 약속 라이브러리λ₯Ό ν•œ 번만 μ„€μ •ν•˜λŠ” 것과 λ°˜λŒ€λ‘œ λͺ½κ΅¬μŠ€ 비동기 κΈ°λŠ₯에 μ•‘μ„ΈμŠ€ν•˜λŠ” 각 νŒŒμΌμ— promise libλ₯Ό μ„€μ •ν•΄μ•Όν•©λ‹ˆκΉŒ?

@ stevenelson74708 저도 같은 λ¬Έμ œκ°€μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ μ§„μž… μ μ—μ„œ mongoose.Promise = global.Promise 둜 ν•΄κ²°ν–ˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. λͺ½κ΅¬μŠ€ 약속에 μ•‘μ„ΈμŠ€ν•˜λŠ” λͺ¨λ“  νŒŒμΌμ— ν•„μš”ν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. κ½€ μ§œμ¦λ‚˜. λͺ½κ΅¬μŠ€ ꡬ성을 λ³„λ„μ˜ 파일둜 μ„€μ •ν•˜κ³  내보내고 ν•„μš”ν•  λ•Œλ§ˆλ‹€ κ°€μ Έ μ˜€λ©΄λ©λ‹ˆλ‹€.

λ˜ν•œ μ΅œκ·Όμ— app.js νŒŒμΌμ— 약속을 μ„€μ •ν–ˆμ§€λ§Œμ΄ κ²½κ³ κ°€ ν‘œμ‹œλ˜λŠ” 것을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. λ™μΌν•œ 결과둜 λ„€μ΄ν‹°λΈŒμ™€ 블루 λ²„λ“œλ₯Ό λͺ¨λ‘ μ‚¬μš©ν•΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

// FILE: app.js
import bluebird from 'bluebird';
import mongoose from 'mongoose';

// use bluebird as default promise library
mongoose.Promise = bluebird;

mongooseλ₯Ό λ‚΄ λͺ¨λΈ 쀑 λͺ‡ 개둜 가져와 μŠ€ν‚€λ§ˆ λ©”μ„œλ“œμ—μ„œ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λͺ½κ΅¬μŠ€λ₯Ό 자체적으둜 κ°€μ Έ μ˜€λŠ” νŒŒμΌμ— promise 라이브러리λ₯Ό μ„€μ •ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€ (μ•„λž˜ 슀 λ‹ˆνŽ«μ˜ TODO μ°Έμ‘°). λΉ„μŠ·ν•œ μ½”λ“œ ꡬ쑰가 μ£Όμ–΄ μ‘Œμ„ λ•Œ λͺ‡ 달 전에 κ²½κ³ λ₯Ό λ³Έ 기얡이 μ—†μŠ΅λ‹ˆλ‹€.

// FILE: SessionModel.js
import bluebird from 'bluebird';
import mongoose from 'mongoose';

// TODO: remove this redundant bit of code
// use bluebird as default promise library
mongoose.Promise = bluebird;

SessionSchema.methods.getUser = function(callback) {
  return mongoose.model('User').findById(this.user, callback);
};

@mcfarljw λ‹€μŒκ³Ό κ°™μ΄ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

// config.js
const bluebird = require('bluebird');
const mongoose = require('mongoose');
mongoose.Promise = bluebird;
mongoose.connect('mongodb://localhost:27017/myApp)
module.exports = { mongoose }
// SessionModel.js
const { mongoose } = require('./config')

SessionSchema.methods.getUser = function(callback) {
  return mongoose.model('User').findById(this.user, callback);
};

μ΄λ ‡κ²Œν•˜λ©΄ "mongoose.Promise = bluebird"λ₯Ό μ—¬λŸ¬ 번 μ“Έ ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. :)

λ‚΄ μƒν™©μ—μ„œλŠ” .then() ꡬ문을 μ‚¬μš©ν•˜μ—¬ ν•˜μœ„ λ¬Έμ„œμ—μ„œ μž‘μ—… ν•  λ•Œ μ‚¬μš© 쀑단 κ²½κ³ κ°€ ν‘œμ‹œλ˜μ§€λ§Œ λΆ€λͺ¨ λ¬Έμ„œμ—μ„œλŠ” 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 가끔씩 κ²½κ³ λ₯Ό λ°›μœΌλ©΄ 어린이 λ¬Έμ„œλ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 ꡬ문 λ¬Έμ œκ°€ μžˆλ‹€κ³  μƒκ°ν–ˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μœ„μ—μ„œ μ‘°μ–Έ ν•œ κ²ƒμ²˜λŸΌ λͺ¨λΈ νŒŒμΌμ— 약속 쀄이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

예, mongoose.model을 λ‚΄ 보낸 μŠ€ν‚€λ§ˆ νŒŒμΌμ—μ„œ mongoose.Promiseλ₯Ό μ„€μ •ν•˜λ©΄ mongoose 버전 4.8 μ΄μƒμ—μ„œ κ²½κ³ κ°€ μ œκ±°λ˜λŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€.

λ„€ μžμ‹ μ˜ λ³€ν˜• 된 λ‚΄λ³΄λ‚΄κΈ°λ‘œ 인해 λͺ½κ΅¬μŠ€ μ‹±κΈ€ 톀을 λ„˜κ²¨ μ£Όλ©΄ λ¬Έμ œκ°€ ν•΄κ²° 될 κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 그것은 μ•½κ°„μ˜ ν•΄ν‚Ήμž…λ‹ˆλ‹€.

이 μ‹œμ μ—μ„œ κ²½κ³ λ₯Ό ν”Όν•˜κΈ°μœ„ν•œ "μ μ ˆν•œ"λͺ½κ΅¬μŠ€ μ„€μ • / ꡬ성이 무엇인지 μ •ν™•νžˆ μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€. 이 κ²½κ³ λŠ” ν˜„μž¬ λͺ½κ΅¬μŠ€ λ²„μ „μ˜ λ¬Έμ œμž…λ‹ˆκΉŒ μ•„λ‹ˆλ©΄ λΆ€μ μ ˆν•œ λͺ½κ΅¬μŠ€ 섀정을 λ‚˜νƒ€λ‚΄λŠ” κ²ƒμž…λ‹ˆκΉŒ? κ²½κ³ λ₯Ό λ°©μ§€ν•˜λŠ” ꢌμž₯ λͺ½κ΅¬μŠ€ 섀정이 μžˆμŠ΅λ‹ˆκΉŒ? λ‹€μ‹œ λ§ν•˜μ§€λ§Œ,이 κ²½κ³ λŠ” mongoose 버전 4.8.0μ—μ„œλ§Œ λ°œμƒν•©λ‹ˆλ‹€.

κΈ€λ‘œλ²Œ λͺ½κ΅¬μŠ€λ₯Ό μ„€μ •ν•˜λŠ” 데 λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

좔적 해보면 bluebirdλ₯Ό promise_provider둜 μ μ ˆν•˜κ²Œ μ„€μ •ν•  수 μžˆμ§€λ§Œ promiseλ₯Ό 되돌리렀 κ³ ν•˜λ©΄ ES6이 λ°˜ν™˜λ©λ‹ˆλ‹€.

λ‚˜λŠ” 방금 ν†΅κ³Όν•˜κ³  μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

mongoose.Promise = global.Promise

λͺ½κ΅¬μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  μ†ŒμŠ€ νŒŒμΌμ—μ„œ λͺ½κ΅¬μŠ€μ˜ μš”κ΅¬ / κ°€μ Έ 였기λ₯Ό μ¦‰μ‹œ μˆ˜ν–‰ ν•  수 있으며 κ³Όλ„ν•˜μ§€λ§Œ 생각이 거의 듀지 μ•Šκ³  μ‹œκ°„μ΄ 많이 걸리지 μ•Šμ•˜μœΌλ©° μ™„μ „νžˆ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ‹€μ œλ‘œ κ°€μž₯ 큰 κ±°λž˜λŠ” μ•„λ‹™λ‹ˆλ‹€.

μž‘μ—…μ„ μš”κ΅¬ν•˜κ³  κ°€μ Έ μ˜€λŠ” 방법에 λŒ€ν•œ μ œν•œλœ 지식에 λ„μ „ν•©λ‹ˆλ‹€. λͺ‡ λ²ˆμ΄λΌλ„ ν•„μš”ν•œ 것이 μžˆμ–΄λ„ 항상 같은 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€μ§€λ―€λ‘œ 약속을 ν•œ 번만 μ„€μ •ν•˜λ©΄ μΆ©λΆ„ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ 그것은 μ•½κ°„ 반 μ§κ΄€μ μž…λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”
문제λ₯Ό μΌμœΌν‚€λŠ” λͺ‡ 가지 예제 μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

import mongoose from 'mongoose';

mongoose.Promise = Promise;

import Test from './test.model';

mongoose.connect(uri, options);
mongoose.connection.on('error', err => console.error(`MongoDB connection error: ${err}`));

Test.create({ name: 'Hi'})
  .then(() => Test.findOne({}))
  .then(res => res.save())
  .then(() => console.log('Done'));

(test.model은 이름 ν•„λ“œκ°€ ν•˜λ‚˜ 인 λ‹¨μˆœν•œ λͺ¨λΈμž…λ‹ˆλ‹€)

μ–΄λ–€ 이유둜 res.save(); ν•  λ•Œ λ¬Έμ œκ°€ 처음 λ‚˜νƒ€λ‚©λ‹ˆλ‹€. 그것 μ—†μ΄λŠ” λͺ¨λ“  것이 ν‰μ†ŒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” μ½”λ“œλ₯Ό 트랜슀 파일 ν•  λ•Œ 바벨이 μˆœμ„œλ₯Ό λ³€κ²½ν•˜λŠ” λ°μ„œ λΉ„λ‘―λœ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. 바벨이 트랜슀 파일 ν•  λ•Œ λͺ¨λ“  κ°€μ Έ 였기λ₯Ό 맨 μœ„λ‘œ μ΄λ™ν•©λ‹ˆλ‹€. λ”°λΌμ„œ λ‚΄ μ˜ˆμ œμ—μ„œ test.model을 κ°€μ Έμ˜¬ λ•Œ Promise-libraryλŠ” μ—¬μ „νžˆ mpromise에 ν• λ‹Ήλ©λ‹ˆλ‹€.

Node.js 6.10.0κ³Ό Mongoose 4.8.5λ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ”λ°μ΄ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

λ‚΄ μ‚¬μš©μž 개체λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

var newUser = User({
    login       : 'john',
    password    : 'secret',
    firstname   : 'John',
    lastname    : 'Doe',
    avatar      : 'avatar.png'
});

newUser.save(function(err){
    if(err) throw err;

    console.log('User created !');
});

그리고 λ‚˜λŠ” 같은 였λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ΄λ ‡κ²Œ μ‹œλ„ν–ˆλ‹€ :

mongoose.Promise = require('bluebird');
mongoose.connect(conf.dbpath);

그리고 μ΄λ ‡κ²Œ :

mongoose.Promise = global.Promise;
mongoose.connect(conf.dbpath);

κ·ΈλŸ¬λ‚˜ λ‹€μ‹œ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” κ²½κ³ κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

지원 쀑단 κ²½κ³  μˆ˜μ • 방법 :

var mongoose = require('mongoose');

mongoose.Promise = global.Promise;
var schema = new mongoose.Schema({
 // definition
}, {
 // options
});

module.exports = mongoose.model('foobar', schema);

예, 이것을 λ‚΄ λͺ¨λΈμ— λ„£μœΌλ©΄ μž‘λ™ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ μš°λ¦¬λŠ” mongoose.Promiseλ₯Ό 각 λͺ¨λΈ λ‚΄μ—μ„œ μ΄ˆκΈ°ν™”ν•΄μ•Όν•©λ‹ˆλ‹€.

At this point it's unclear to me as to exactly what the "proper" mongoose setup/configuration to avoid the warning is. 라고 말할 λ•Œ @ stevenelson74708 이 ν›Œλ₯­ν•œ 포인트라고 μƒκ°ν•©λ‹ˆλ‹€.

예, μˆ˜μ •μ€ λͺ¨λ“  λͺ½κ΅¬μŠ€ λͺ¨λΈ 파일둜 λŒμ•„κ°€μ„œ κ°€μ Έ 였기 후에 mongoose.Promise = global.Promise λ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμ΄μ§€λ§Œ,이 λ¬Έμ œλŠ” μ΅œκ·Όμ—μ•Ό λ°œμƒν–ˆκΈ° λ•Œλ¬Έμ— μ˜λ„μ— λŒ€ν•΄λ³΄λ‹€ ꡬ체적인 닡변을 μ–»λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ˜λŠ” κ·Έ 뒀에 원인. 이 μ‹œμ μ—μ„œ 그것이 λͺ½κ΅¬μŠ€, 바벨 λ˜λŠ” 두 κ°€μ§€μ˜ μ‘°ν•©μœΌλ‘œ μΈν•œ λ¬Έμ œμΈμ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

# 5030의 μ†μž„μˆ˜ 일 κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€. > = 4.9.1둜 μ—…κ·Έλ ˆμ΄λ“œν•˜μ‹­μ‹œμ˜€.

기둝을 μœ„ν•΄ @bricss μ†”λ£¨μ…˜μ€ λ‚˜λ₯Ό μœ„ν•΄ κ½€ 잘 μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€. :)

μ²˜μŒμ— 해결책은 @ steve-p-comμ—μ„œ λ‚˜μ™”μŠ΅λ‹ˆλ‹€. @bricssκ°€ μ•„λ‹™λ‹ˆλ‹€.
@ vkarpov15 4.9.3κ³Ό λ™μΌν•œ κ²½κ³ .
@stillesjo λ°”λ²¨κ³ΌλŠ” 아무것도 μ•„λ‹™λ‹ˆλ‹€. κ²½κ³ λŠ” λ…Έλ“œ 7.8.0의 Babelμ΄μ—†λŠ” nativμ—μ„œλ„ λ°œμƒν•©λ‹ˆλ‹€.

버전 4.9.3 이후 κ²½κ³ κ°€ μ—†μŠ΅λ‹ˆλ‹€ 🌷

λͺ¨λ“  λͺ¨λΈμ— mongoose.Promise = global.Promise; λ₯Ό 섀정해도 _ideal_ fixκ°€ μ•„λ‹ˆλΌκ³  μƒκ°ν•©λ‹ˆλ‹€. global.Promise λ₯Ό κΈ°λ³Έκ°’μœΌλ‘œ μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 경우 λ³€κ²½ν•  μˆ˜μžˆλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

λ‚΄ λͺ¨λΈ λ‹¨μœ„ ν…ŒμŠ€νŠΈ. 둜컬 λ˜λŠ” CIμ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•  λ•Œ κ²½κ³ κ°€ ν‘œμ‹œλ˜μ§€ μ•Šλ„λ‘ ν¬ν•¨ν•΄μ•Όν•©λ‹ˆλ‹€.
λ‚΄κ°€ μ‚¬μš©ν•˜κ³  "mongoose": "4.10.4" λ…Έλ“œ v7.10.0

λΏ‘ 빡뀨

이 DRY μ†”λ£¨μ…˜μ— μΆ”κ°€ν•˜λ €λ©΄ 각 λͺ¨λΈ 내뢀에 μ„€μ •ν•˜λŠ” λŒ€μ‹  λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ 연결을 μ΄ˆκΈ°ν™”ν•˜λŠ” μœ„μΉ˜λ₯Ό μ„€μ •ν•˜μ‹­μ‹œμ˜€.

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://...');

μž‘λ™ν•˜λŠ” 것 κ°™λ‹€

κ·Έλž˜λ„ λͺ¨λ“  μ‚¬λžŒμ—κ²Œ λ°˜λ“œμ‹œ νš¨κ³Όκ°€μžˆλŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. μ½”λ“œ ꡬ쑰에 따라 λ‹€λ¦…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ—°κ²° μ½”λ“œκ°€μžˆλŠ” νŒŒμΌμ— λ³„λ„μ˜ μ†ŒμŠ€ 파일의 λͺ¨λΈμ΄ ν•„μš”ν•œ 경우 μž‘μ—… μš”κ΅¬ 방식은 μ—°κ²° μ½”λ“œκ°€ 포함 된 νŒŒμΌμ— μ „μ—­ 약속이 μ„€μ •λ˜κΈ° 전에 ν•΄λ‹Ή μ†ŒμŠ€ νŒŒμΌμ΄λ‘œλ“œλ¨μ„ μ˜λ―Έν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λͺ¨λΈμ€ 약속에 λŒ€ν•œ 기본값을 계속 μ‚¬μš©ν•©λ‹ˆλ‹€. μ•ˆμ „ν•œ κ²½λ‘œλŠ” λ‹¨μˆœνžˆ λͺ½κ΅¬μŠ€κ°€ ν•„μš”ν•œ λͺ¨λ“  μ†ŒμŠ€ νŒŒμΌμ—μ„œ μ „μ—­ 약속을 μ„€μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

이것은 λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•©λ‹ˆλ‹€
````
'λͺ½κ΅¬μŠ€'μ—μ„œ λͺ½κ΅¬μŠ€ κ°€μ Έ 였기;
'./config'μ—μ„œ ꡬ성 κ°€μ Έ 였기;
'bluebird'μ—μ„œ bluebird κ°€μ Έ 였기;

κΈ°λ³Έ 콜백 내보내기 => {
mongoose.Promise = 블루 λ²„λ“œ;
// ꡬ성 파일의 λ°μ΄ν„°λ² μ΄μŠ€ μΈμŠ€ν„΄μŠ€μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ—°κ²°
let db = mongoose.connect (config.mongoUrl, {useMongoClient : true});
콜백 (db);
}
````

그게 μ œκ°€ν•˜κ³ μžˆλŠ” λ°©μ‹μž…λ‹ˆλ‹€.

var colors = require('colors');
var mongo = require('mongodb');
var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');

var db = mongoose.connection;

mongoose.connect('mongodb://localhost:27017/db', { useMongoClient: true })
.then(function(){
  console.log(" Connected to dbName ".green);

}).catch(err => console.error(err));

.saveκ°€ μ•„λ‹Œ mongoose와 ν•¨κ»˜ μ œκ³΅λ˜λŠ” .create ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Όν•©λ‹ˆλ‹€.
λ‚˜λŠ” λ‚΄ 것을 λ°”κΎΈκ³  문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 4.13.9이고 이것은 μ—¬μ „νžˆ β€‹β€‹μ‘΄μž¬ν•©λ‹ˆλ‹€. @ Gilbert136 μ†”λ£¨μ…˜μ€ 이것을 μˆ˜μ •ν•˜μ§€λ§Œ μ΄μƒν•˜κ²Œ μƒκ°ν•©λ‹ˆλ‹€. .create 호좜 .save, κ·Έλ ‡λ‹€λ©΄ 지원 쀑단 κ²½κ³ κ°€μ—†λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

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