DeprecationWarning: open()
๋ mongoose >= 4.11.0์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋์ openUri()
๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ connect()
๋๋ createConnection()
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ useMongoClient
์ต์
์ ์ค์ ํ์ญ์์ค. createConnection()
๋ชฝ๊ตฌ์ค 4.11.0, ๋ชฝ๊ณ DB 2.2.29, NodeJS 8.1.2
+1 , ๊ทธ ๊ฒฝ๊ณ ๋ฅผ ์์ ๊ธฐ ์ํด ์ด๋๋ฅผ ์์ ํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ฒฝ๊ณ ๋ ์ฐ๊ฒฐ ๋ฌธ์์ด์ ๋ณต์ ๋ณธ ์ธํธ๊ฐ ์์ ๋ ์ค์ ๋ก Mongoose ๋ด๋ถ์ ์ฝ๋์ ๋ํ ๊ฒ์ ๋๋ค.
Mongoose.prototype.connect = function() {
var conn = this.connection;
if ((arguments.length === 2 || arguments.length === 3) &&
typeof arguments[0] === 'string' &&
typeof arguments[1] === 'object' &&
arguments[1].useMongoClient === true) {
return conn.openUri(arguments[0], arguments[1], arguments[2]);
}
if (rgxReplSet.test(arguments[0]) || checkReplicaSetInUri(arguments[0])) {
return new MongooseThenable(this, conn.openSet.apply(conn, arguments));
}
return new MongooseThenable(this, conn.open.apply(conn, arguments));
};
@tinovyatkin
๊ทธ๋ ๋ค๋ฉด ์ด๊ฒ์ ๋ฒ๊ทธ์ ๋๊น?
๋ฒ๊ทธ์ฒ๋ผ ๋ณด์
๋๋ค useMongoClient: true
๋ฅผ ์ต์
์ ์ถ๊ฐํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๊น?
useMongoClient: true
๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ์์ง๊ฐ ์ฌ๋ผ์ง์ง๋ง ๋ด ๋ฌธ์๋ ๋ก๋๊ฐ ์ค์ง๋ฉ๋๋ค. ๋ ๊น์ด ๋๋ฒ๊น
ํ์ง๋ ์์์ง๋ง ์ฝ๋๋ฅผ ์ ์ฉํ๊ธฐ ์ ์ ๋จผ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฃ๊ณ ์ถ์ต๋๋ค.
๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์์์ ์ ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก๋ ์๋ํ์ง ์์ต๋๋ค. ๋จ์ํ MyModel.find ๋ฉ์๋๋ฅผ ๋ ์ด์ ์คํํ์ง ์์ผ๋ฉฐ ์ค๋ฅ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
"useMongoclient: true" ์ต์ ์ด ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ์๋ํ์ง ์๋ ์ด์ ๋ ํด๋น ์ต์ ์ ๋ํ ๋ชจ๋ mongoose ์ฐ๊ฒฐ ๊ด๋ จ ๊ฐ์ฒด๊ฐ mongodb์ ์ก์ธ์คํ ์ ์๋ ๋๋ฏธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
const server = express();
mongoose.connect('mongodb://localhost/advisorDemoTestDB', { useMongoClient: true })
.then(() => require('./db-init')(server))
.catch(err => console.error(err));
ํ์ง๋ง ์๋ํ์ง ์์ต๋๋ค
๋ณต์ ๋ณธ ์ธํธ๊ฐ ์์ด๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋์ผํ ๋ฌธ์ ๊ฐ ์์:
(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`
๊ฐ์...
๋ด mongo ์ฐ๊ฒฐ์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ ํ์๋ ์ง๊ธ ์๋ฌด ๊ฒ๋ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค.
{useMongoClient: true}.
๋ชจ๋ ์ ์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!!
+1 ๋ณต์ ๋ณธ ์ธํธ์ ๋์ผ, ์ค๋ฉ ์์
+1
+1
+1
+1
+1
+1
+1
์ด๊ฒ์ ๋ํ ๊ฐ์ฅ ์ฌ์ด ์์ ; " npm remove mongoose
" ๊ทธ๋ฐ ๋ค์ " npm install [email protected] --save
" ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ์
๊ทธ๋ ์ด๋๊ฐ ํญ์ ์ต์ ์ ์ ํ์ ์๋๋๋ค.
+1
+1
2๊ฐ์ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
(node:9260) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`
Server started on port 3000
Db.prototype.authenticate method will no longer be available in the next major
release 3.x as MongoDB 3.6 will only allow auth against users in the admin db
and will no longer allow multiple credentials on a socket. Please authenticate
using MongoClient.connect with auth credentials.
์ฒซ ๋ฒ์งธ ์ค๋ฅ๋ 4.11.0์์ ๋ํ๋ฌ์ต๋๋ค. ๋ ๋ฒ์งธ ์ค๋ฅ๋ ์ด์ ๋ฒ์ ์ ๋ชฝ๊ตฌ์ค์์๋ ๋ํ๋ฌ์ต๋๋ค.
plhosk, ๋ ๋ฒ์งธ ๋ฌธ์ ๋ 4.11์์ ์์ ๋์ด์ผ ํ์ง๋ง ์ฌ์ ํ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ์๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
+1
์ฌํ๊ฒ๋ +1.
๋ฌธ์ ์์ด 4.10.8์ ์ค์นํ์ต๋๋ค. 11์ด ์์ ๋ ๋๊น์ง npm install mongoose --save
๋ฅผ ๊ธฐ๋ณธ๊ฐ 4.10.8๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
+1
+1
+1
+1
๋๋ ๋ํ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๋ค.
__๋
ธ๋ ๋ฒ์ __: v6.10.0
__MongoDB__ ํ๊ฒฝ: (์ ๋ ์ต์ ๋ฒ์ ์ Mongo ๋์ปค ์ปจํ ์ด๋์์ ์คํํ์ต๋๋ค)
2017-06-20T08:04:24.509+0000 I CONTROL [initandlisten] db version v3.4.5
2017-06-20T08:04:24.509+0000 I CONTROL [initandlisten] git version: 520b8f3092c48d934f0cd78ab5f40fe594f96863
2017-06-20T08:04:24.509+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1t 3 May 2016
2017-06-20T08:04:24.509+0000 I CONTROL [initandlisten] allocator: tcmalloc
2017-06-20T08:04:24.509+0000 I CONTROL [initandlisten] modules: none
2017-06-20T08:04:24.509+0000 I CONTROL [initandlisten] build environment:
2017-06-20T08:04:24.509+0000 I CONTROL [initandlisten] distmod: debian81
2017-06-20T08:04:24.509+0000 I CONTROL [initandlisten] distarch: x86_64
2017-06-20T08:04:24.509+0000 I CONTROL [initandlisten] target_arch: x86_64
2017-06-20T08:04:24.509+0000 I CONTROL [initandlisten] options: { security: { authorization: "enabled" } }
๋ด ์ฐ๊ฒฐ ๊ตฌ์ฑ:
var dbURL = `mongodb://${dbHost}:${dbPort}/${dbName}?authSource=admin`;
var dbAuth = {
useMongoClient: false
user: dbUser,
pass: dbPass
}
mongoose.connect(dbURL, dbAuth);
useMongoClient
๋ฅผ ๊ฑฐ์ง์ผ๋ก ์ฌ์ฉํ ๋. ๋ชฝ๊ตฌ์ค๋ ๋ค์ ๊ฒฝ๊ณ ๋ฅผ ํ์ํฉ๋๋ค.
(node:7868) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`
Express server listening on port 3222 in development mode
Db.prototype.authenticate method will no longer be available in the next major release 3.x as MongoDB 3.6 will only allow auth against users in the admin db and will no longer allow multiple credentials on a socket. Please authenticate u
sing MongoClient.connect with auth credentials.
ํ์ง๋ง ์ ์๋ํฉ๋๋ค.
๊ทธ๋ฌ๋ true
๋ก ์ค์ ํ๋ฉด ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋์์ต๋๋ค.
Unhandled rejection MongoError: not authorized on users to execute command { listIndexes: "sessions", cursor: {} }
at Function.MongoError.create (<my project path>\node_modules\mongoose\node_modules\mongodb-core\lib\error.js:31:11)
at queryCallback (<my project path>\node_modules\mongoose\node_modules\mongodb-core\lib\cursor.js:212:36)
at <my project path>\node_modules\mongoose\node_modules\mongodb-core\lib\connection\pool.js:469:18
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
๋ํ ์ฐ๊ฒฐ URL์์ authSource=admin
์ ์ ๊ฑฐํ๋ ค๊ณ ์๋ํ์ง๋ง ์ฌ์ ํ ์๋ํ์ง ์์ต๋๋ค.
(node:451) DeprecationWarning: open()
๋ mongoose >= 4.11.0์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ฌ์ฉ
openUri()
๋์ connect()
๋๋
createConnection()
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ useMongoClient
์ต์
์ ์ค์ ํฉ๋๋ค.
Db.prototype.authenticate ๋ฉ์๋๋ ๋ค์ ์ฃผ์ ๋ฒ์ ์์ ๋ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MongoDB 3.6์ admin db ๋ฐ w์ ์ฌ์ฉ์์ ๋ํด์๋ง ์ธ์ฆ์ ํ์ฉํ๋ฏ๋ก ์๋ 3.x
ill์ ๋ ์ด์ ์์ผ์์ ์ฌ๋ฌ ์๊ฒฉ ์ฆ๋ช
์ ํ์ฉํ์ง ์์ต๋๋ค. M์ ์ฌ์ฉํ์ฌ ์ธ์ฆํ์ญ์์ค.
์ธ์ฆ ์๊ฒฉ ์ฆ๋ช
์ด ์๋ ongoClient.connect.
mongoose ๋ฒ์ 4.11.0 ๋ฐ MongoDB ๋ฒ์ 3.4.5์์ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
+1
+1
์ฌ์ฉ
mongoose.createConnection(URI)
@nandofalcao ์ฌ์ฉ ์:
์ ๊ธฐ๋ก์ ์ ์ฅํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
let userSchema = mongoose.Schema({ name: String });
let User = mongoose.model('User', userSchema);
let joao = new User({ name: 'NewJoao ' });
joao.save((err) => err ? throw err : console.log('User created!'));//nothing happens
์ค๋ ๋ฐค ๋ค๊ตญ์ด๋ฅผ ์ถ๊ฐํ๊ณ ์ด๊ฒ์ ๊ฒฝํํ๊ณ +1ํฉ๋๋ค.
// Load Mongoose
const mongoose = require('mongoose');
// import mongoose from 'mongoose' didn't give access to .connect()
// Use native Promises
mongoose.Promise = global.Promise;
// Connect database
export const Mongoose = new Promise((resolve, reject) => {
const uri = `mongodb://${Singleton.currentConfig.databases.mongodb.host}/${Singleton.currentConfig.databases.mongodb.database}`;
const options = {
user: Singleton.currentConfig.databases.mongodb.user,
pass: Singleton.currentConfig.databases.mongodb.password,
server: {
reconnectTries: Singleton.currentConfig.databases.mongodb.reconnectTries,
reconnectInterval: Singleton.currentConfig.databases.mongodb.reconnectInterval,
socketOptions: {
keepAlive: Singleton.currentConfig.databases.mongodb.keepAlive,
connectTimeoutMS: Singleton.currentConfig.databases.mongodb.connectTimeoutMS
},
},
};
// Initiate document store
mongoose.connect(uri, options)
// Check for anomalies
.then((connected) => {
if (mongoose.connection.readyState !== 1) {
reject(connected);
}
resolve(connected);
})
// Complete meltdown
.catch((error) => {
console.log(`MongoDB Connection Error: ${error}`);
process.exit(0);
});
});
+1
๋ ๋ฒ์งธ ๋ฉ์์ง๊ฐ ๋ํ๋ฉ๋๋ค.
[2017-06-27 16:14:23.702] [INFO] :: - 2000๋ฒ ํฌํธ์์ ์๋ฒ ์์
(node:1193) DeprecationWarning: open()
๋ mongoose >= 4.11.0์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋์ openUri()
๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ connect()
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ useMongoClient
์ต์
์ ์ค์ ํ์ญ์์ค. ๋๋ createConnection()
Db.prototype.authenticate ๋ฉ์๋๋ MongoDB 3.6์ด admin db์ ์ฌ์ฉ์์ ๋ํด์๋ง ์ธ์ฆ์ ํ์ฉํ๊ณ ์์ผ์์ ๋ ์ด์ ์ฌ๋ฌ ์๊ฒฉ ์ฆ๋ช ์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค 3.x์์ ๋ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ธ์ฆ ์๊ฒฉ ์ฆ๋ช ์ผ๋ก MongoClient.connect๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆํ์ญ์์ค.
+1
+1
+1
+1
+1
๋๊ตฐ๊ฐ ์ธ๋ชจ์๋ +1์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด๊ฒ์ ์ ๊ธ ์ ์์ต๋๊น?
์ด ์ค๋ ๋์ ๊ตฌ๋ ์์ ๋ํ ์์๋ฅผ ์ํด +1๋ก ๋ต์ฅ์ ๋ณด๋ด๋ฉด ์ธ๋ชจ์๋ ์ด๋ฉ์ผ ์๋ฆผ์ด ์์ฑ๋๋ฏ๋ก ์๋ต์ ์ค์ง ํ์ธ์. ์ด๊ฒ์ ํฌ๋ผ์ด ์๋๋๋ค. ์ด ์ค๋ ๋๋ฅผ ํ๋ก์ฐํ๋ ค๋ฉด ์ค๋ฅธ์ชฝ ์ฌ์ด๋๋ฐ์ ์๋ ๊ตฌ๋ ๋ฒํผ์ ์ฌ์ฉํ์ธ์. ์ค์ค๋ก ์กฐ์ฌํ๊ณ ์๋ฃจ์ ์ ๊ธฐ์ฌํ ์๋ ์์ต๋๋ค.
๋ฒ์ ์ 4.10.8๋ก ๋ค์ ๋ณ๊ฒฝํ๋๋ฐ ์ด์ ์ ๋๋ก ์๋ํฉ๋๋ค.
ValYouW๊ฐ ๋ฌธ์ ๋ก๋ฉ ๋ฌธ์ ๋ฅผ ์ ์ฌ์ ์ผ๋ก ์์ ํ ๊ฒ ๊ฐ์ต๋๋ค: #5404
mongoose.connection.openUri('mongodb://127.0.0.1/camp_v12')
์๋ฌด๋ ์ด๊ฒ์ ์๋ ํ์ต๋๊น? ์ฌ์ฉํ์ง ์๋ ๊ฒฝ๊ณ ๋ ์ด๊ฒ์ ์ฌ์ฉํ ๋ ์ฌ๋ผ์ก์ต๋๋ค. ๋ฌธ์์์์์ต๋๋ค.
์ด๋ฏธ ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๊ฐ์ ํ๋ @crisamdegracia
// Or, if you already have a connection
connection.openUri('mongodb://localhost/myapp', { /* options */ });
์ฐ๋ฆฌ๋ํ์ง ์์ต๋๋ค (์ ์ด๋ mongoose.connect ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ mongodb์ ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์)
mongoose.connect(config.get('mongo'), {
useMongoClient: true,
});
๋ฌธ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค... ๋ฌด์จ ์ผ์ด์ฃ ?
+1
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ฐ๊ฒฐํ ์ ์๋ค๊ณ ์ค๋ช ํ๋ @phased90 ์ ์ฐ๊ฒฐ๋ ๋ฌธ์ ๋ฅผ ์ดํด๋ณธ ํ:
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/test', {useMongoClient: true})
.then(() => {
let Cat = mongoose.model('Cat', {name: String});
let kitty = new Cat({name: 'Zildjian'});
kitty.save(err => {
if (err) {
console.log(err);
} else {
console.log('meow');
}
});
})
.catch(err => console.error(err));
์ฝ๋๋ฅผ ๋น ๋ฅด๊ฒ ์ดํด๋ณด๋ {useMongoClient: true}
์ต์
์ด ์ ๊ณต๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ 4.11์์ MongooseThenable
๋ฅผ ๋ฐํํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด ์ธ์คํด์ค์์ Promise.ES6
์ ์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ Connection.prototype.openUri
๋ฅผ ํธ์ถํฉ๋๋ค. ํด๋น Connection.prototype.openUri
ํธ์ถ์ด MongooseThenable
๋ก ๋ํ๋์ด์ผ ํฉ๋๊น?
์ง๋ฌธ์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฒ์ ๋ณด๋ ๊ฒ์ด๋ฏ๋ก ํ์ ์ด ์์ง ์์ต๋๋ค. ํ์ง๋ง Moongoose.prototype.connect
๊ฐ ํญ์ MongooseThenable
์ ์ธ์คํด์ค๋ฅผ ๋ฐํํด์ผ ํ๋์ง์ ๋ํ ์ค๋ช
์ ์ป์ ์ ์๋ค๋ฉด ์์ ์ฌํญ์ ์ ๊ณตํ๋๋ก ๊ธฐ๊บผ์ด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค.
{useMongoClient: true}
๋ฅผ ์ฌ์ฉํ๋ฉด Connection.prototype.openUri
๊ฐ ํธ์ถ๋๋ฉฐ, ์ด๋ #5404๋ก ์ธํด DB์ ์ฐ๊ฒฐํ๊ธฐ __์ ์__ ์์ฑ๋ ๋ฒํผ๋ง๋ ๋ช
๋ น์ ํธ๋ฆฌ๊ฑฐํ์ง ์์ต๋๋ค.
+1
์ฃ์กํฉ๋๋ค. ์ํฉ์ด ์ด์ํ์ต๋๋ค. ์ ์ ํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
@varunjayaraman ๋ฏธ์ํ ํ์ ์์ด. ์ฌ๋๋ค์ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ ์ค์ค๋ก ํด๊ฒฐํ๋ ค๊ณ ํ ์ ์์ต๋๋ค.
+1
๋ฐ๋ผ์ ์ด๋ฆฐ ์ค์ ๋ฌธ์ ์ ๊ด๋ จํ์ฌ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ ๋ฒ๊ทธ๊ฐ ์๋๋ฉฐ ๋จ์ง ๊ฒฝ๊ณ ์ผ ๋ฟ์
๋๋ค. mongoose๋ ํ์ฌ ์ฐ๊ฒฐ ๋
ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ ์์ ์ด๋ฏ๋ก useMongoClient
๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ๋ฌธ์ ์์ ์ฐพ์ ์ ์์ต๋๋ค
๋ณ๋์ ๋ฉ๋ชจ์์ ์ด๊ฒ์ ์ญ๋ฐฉํฅ ๋ธ๋ ์ดํน ์ฒด์ธ์ง์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค์ ๋ง์ด๋ ๋ฆด๋ฆฌ์ค์์ ์์ ๋ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์๋ํฉ๋๋ค(์๋ก์ด useMongoClient
๋ถ๋ถ์ ๋ํด ์ ์ฅ).
const mongoose = require('mongoose');
const co = require('co');
mongoose.Promise = global.Promise;
const GITHUB_ISSUE = `gh-5399`
exec()
.then(() => {
console.log('successfully ran program');
process.exit(0);
})
.catch(error => {
console.error(`Error: ${ error }\n${ error.stack }`);
});
function exec() {
return co(function*() {
const db = mongoose.createConnection(`mongodb://localhost:27017/${ GITHUB_ISSUE }`, { useMongoClient: true })
const schema = new mongoose.Schema({
name: String
});
const Model = db.model('Model', schema);
});
}
db.model
๊ฐ ๋ ์ด์ ํจ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋์๊ฒ ์ค๋ฅ๋ฅผ ๋์ง๋ ๊ฒ ๊ฐ์ต๋๋ค.
mongoose.model
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
const mongoose = require('mongoose');
const co = require('co');
mongoose.Promise = global.Promise;
const GITHUB_ISSUE = `gh-5399`
exec()
.then(() => {
console.log('successfully ran program');
process.exit(0);
})
.catch(error => {
console.error(`Error: ${error}\n${error.stack}`);
});
function exec() {
return co(function* () {
const db = mongoose.connect(`mongodb://localhost:27017/${GITHUB_ISSUE}`, { useMongoClient: true })
return db
.then(() => {
const schema = new mongoose.Schema({
name: String
});
const Model = mongoose.model('Model', schema);
return Model.create({ name: 'test' });
})
.then(doc => console.log(doc));
});
}
@varunjayaraman ๋ฐฉ๊ธ Mongoose๋ฅผ ์
๋ฐ์ดํธํ๊ณ ์ ์ํ ๋๋ก useMongoClient: true
๋ฅผ ์ฌ์ฉํ์ง๋ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๊ณต์ Mongoose ๋ฌธ์ ์ ๋ฐ๋ฅด๋ฉด user
๋ฐ pass
์ต์
์ ์ง์ํ์ง ์์ต๋๋ค.
the options [user] is not supported
the options [pass] is not supported
๊ทธ๋ฆฌ๊ณ ๋ค, ์ธ์ฆ์ ์คํจํ์ต๋๋ค. :-1:
์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๊ณ ๋์ ์ฐ๊ฒฐ ๋ฌธ์์ด์ ์ ๋ฌํ๋ ค๊ณ ํฉ๋๋ค.
์ฐ๊ฒฐ ๋ฌธ์์ด์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ์ํธ๋ฅผ ์ถ๊ฐํ๋ฉด ์๋ํฉ๋๋ค. ๋ฌธ์๋ฅผ ์
๋ฐ์ดํธํด์ผ ํ ์๋ ์์ต๋๋ค. ๐
@itpcc 4.10.8
๋ฒ์ ์ ์ฌ์ฉํด๋ณด๋ ๊ฒ์ด ํ์์ ์์ ๊ฐ์ฅ ์ข์ ์๋ฃจ์
์
๋๋ค.
npm remove mongoose
npm install [email protected] --save
ํฌ๋ ๋ง: @Chenz62
@CQBinh ์กฐ์ธ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ด๋ฏธ ๊ทธ๊ฒ์ ๋ํ ๋๊ธ์ ์ฝ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํ์ฌ๋ก์๋ ์ด์ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ต์์ ์๋ฃจ์
์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๊ฒฐ ๋ฌธ์์ด์ ์ฝ์
ํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋ฌธ์์ ์ธ๊ธ๋์ด ์๊ธฐ ๋๋ฌธ์ ํผ๋์ค๋ฝ์ต๋๋ค๋ง ์๋ํ์ง ์์ต๋๋ค. :/
BTW, ์ฌ๊ธฐ ์ ์ ๋ฌธ์ ๋ก ๋ณด๊ณ ํฉ๋๋ค.
@varunjayaraman db.model
๊ฐ ๋ ์ด์ ์กด์ฌํ์ง ์์ผ๋ฉด ๋ค๋ฅธ ๋ชจ๋ธ๊ณผ์ ์ฌ๋ฌ ๋ค๋ฅธ ๋ชฝ๊ตฌ์ค ์ฐ๊ฒฐ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํฉ๋๊น?
์๋ฅผ ๋ค์ด model1๊ณผ model2๋ mongooseConnection1์ ์ฐ๊ฒฐ๋๊ณ model3๊ณผ model4๋ mongooseConnection2์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ด์ ์๋ ๊ฐ ์ฐ๊ฒฐ์ ๋ํด mongoose.createConnection
๋ฅผ ํธ์ถํ๊ณ ์ด๋ฌํ ๊ฐ ๋ฐํ ๊ฐ์ ๋ชจ๋ธ์ ์ฐ๊ฒฐํ์ฌ ์ด ์์
์ ์ํํ์ต๋๋ค.
ํธ์ง: ์๋๋ฉด ์ด ๊ฒฝ์ฐ์๋ ์ฌ์ ํ ์๋ํฉ๋๊น?
const conn = mongoose.createConnection(...);
const Model = conn.model('ModelName', schema);
+1
@boyce-ywr ์ง์งํ๊ฒ, ๋ ๋ค๋ฅธ +1??? ๋๋ค ๋ฌด์จ์ผ ์์ด??
๊ฑด์ค์ ์ธ ์๊ฒฌ์ ๊ฒ์ํ์ง ๋ง๊ณ ๊ทธ๋ฐ ๋ด์ฉ์ ๊ฒ์ํ์ธ์.
๋ชฝ๊ตฌ์ค์ ๊ด๋ จํ์ฌ mongoose.connect()
๋ฉ์๋๊ฐ ํฅํ ๋ฆด๋ฆฌ์ค์์ ๋์ฒด๋ ์ง ์ฌ๋ถ๋ ๋์๊ฒ ๋ช
ํํ์ง ์์ต๋๋ค. ๋๊ตฐ๊ฐ ์ค๋ช
ํด ์ฃผ์๊ฒ ์ต๋๊น?
@simonemazzoni ๋น์ ๋ง์ด ๋ง์, ๊ทธ๋ค์ด ์ฐ๋ฆฌ๋ฅผ ์คํธํ๊ณ ์์ต๋๋ค.
+1 ํ ๋ ํ๋ ๋ชจ๋ ์ผ์ ์ฌ๊ธฐ ์๋ ๋ชจ๋ ์ฌ๋์๊ฒ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฉ์ผ ์ ๋ณด๋ด๋ ๊ฒ์ ๋๋ค.
์๋ ๋ ์ฌ๊ธฐ์์ด!
์ฐ๋ฆฌ๋ ์๊ดํ์ง ์๊ณ ๊ฑด์ค์ ์ธ ์๊ฒฌ ๊ณผ ํด๊ฒฐ์ฑ ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
๋ํ ๋ชจ๋ +1์ด ์ด ๋ชฉ๋ก์์ ๊ฒ์๋ฌผ์ ์ญ์ ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ค์ ๋๊ธ์ ๋ณด๊ธฐ ์ํด ์คํฌ๋กคํด์ผ ํ๋ ๊ฒ์ ๋์ ๊ฑฐ์ฌ๋ฆฌ๊ณ ๊ณจ์น ์ํ ์ผ์ ๋๋ค.
์ ์ ์ด๋ค ์ฌ๋๋ค์ด ๋งํ๋ฏ์ด ์ ์ผํ "ํด๊ฒฐ์ฑ
"์ [email protected]_ ์ผ๋ก ๋์๊ฐ๋ ๊ฒ์
๋๋ค ...
์ ์ด๋ ํ์ฌ๋ก๋!
๋ฒ๊ทธ์ฒ๋ผ ๋ณด์ ๋๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด [email protected] ๋ก ๋์๊ฐ์ต๋๋ค.
mongoose.connect(...) ๋์ mongoose.createConnection(...) ์ฌ์ฉ
๋ค์์ @diegoazh ์ ๊ถ์ฅ ์ฌํญ์ ๋ฐ๋ผ [email protected] ์ ์ฌ์ฉํ๋ ์์ ํ ์์ ์์ ๋๋ค.
const mongoose = require('mongoose')
mongoose.Promise = require('bluebird') // optional, use this to get rid of
// the mpromise DeprecationWarning
const conn = mongoose.createConnection('mongodb://localhost/testDB')
const Schema = mongoose.Schema
const UserSchema = new Schema({
username: String,
email: String
})
const User = conn.model('User', UserSchema)
module.exports = User
@midnightcoder ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ฐ๊ฒฐ์ ๋๊ณ ๋์ createConnection์ ์ฌ์ฉํฉ๋๊น?
@bertolo1988 ์ด ๋ฌธ์ ์ ๋ํด ์ ์๋ ppl๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฌ ๋ ๊ฐ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
const conn = mongoose.createConnection(...)
const Model = conn.model(...)
๋๋ ๊ฐ์ธ์ ์ผ๋ก ๋ ๋ฒ์งธ ์๋ฃจ์ ์ ์ ํธํฉ๋๋ค.
๊ฐ์ฌ ํด์!!!
createConnection์ผ๋ก ํด๊ฒฐํ๊ณ ํด๋น ์ฐ๊ฒฐ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ๋ง๋ญ๋๋ค( mongoose ๋์ ).
let mongoose = require('mongoose');
mongoose.Promise = global.Promise;
module.exports = mongoose;
const mongoose = require('./set-mongoose');
module.exports = mongoose.createConnection('mongodb://localhost/advisorDemoTestDB');
์๋ก์ด ์ฐ๊ฒฐ ํจํด์๋ ์ฝ๊ฐ์ ์ฝ๋ ๋ณ๊ฒฝ์ด ํ์ํ๋ฉฐ ํ๋ก์ ํธ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ง์ ์๊ฐ์ด ์์๋ ์ ์์ผ๋ฉฐ ์ํคํ ์ฒ ๋ณ๊ฒฝ์ด ํ์ํ ์๋ ์์ต๋๋ค(๋ชจ๋ธ ์์ฑ์ ์ฐ๊ฒฐ์ด ํ์ํ๋ค๋ ์ฌ์ค์ ๊ฐ์ํ ๋).
์ด์ ์ฐ๊ฒฐ ๋ชจ๋ธ์ด ์ ์ฐ๊ฒฐ ๋ชจ๋ธ์ ๋ํํ ์ ์๋ค๋ฉด ์ข์์ ๊ฒ์ ๋๋ค.
๊ฒ์๋ฌผ์ด ๋๋ฌด ๋ง์์ ์์ฝํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฒฝ๊ณ ๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ๊ณ ์ ๋๋ค. ์ฆ, ์๋๋ฅด์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์๋ฌด ๊ฒ๋ ๋ฐ๊พธ์ง ์๋๋ค๋ฉด ๊ทธ๊ฒ์ ์ฌ์ ํ โโโโ์์ ์ฒ๋ผ ์๋ ํ ๊ฒ์ ๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฒฝ๊ณ ์ ๋ฐ๋ฅด๋ฉด connect()๋ ์์ ๋ ๊ฒ์ด๊ณ useMongoClient๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ํ์๊ฐ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ๊ฐ๋ฅํ ๋ฒ๊ทธ/๋ฌธ์ ๊ฐ ์์ต๋๋ค.
connect('myurl', {useMongoClient: true}) => ๋ฌธ์ ๋ก๋๊ฐ ์ค์ง๋๊ณ db์ ์ธ ์ ์์ต๋๋ค.
connect('myurl', {useMongoClient: false}) => ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ์ง๋ง ๊ฒฝ๊ณ ๊ฐ ๊ณ์ ํ์๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ด ๋ฌธ์ ์ ๋ชฉ์ ์ connect ๋ฉ์๋ ํธ์ถ ์ useMongoClient ์ฌ์ฉ์ ์์ ํ๋ ๊ฒ์ ๋๋ค.
๋์ํ๋ค?
์ฌ์ ํ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ ์ค์ ๋ก "๊ทธ๋ฅ" ๊ฒฝ๊ณ ์ด์ง๋ง ํด๋น ๊ฒฝ๊ณ ๊ฐ ํ์๋๋ฉด ์ค์ ๋ก ์ธ์ ์ ๊ฑฐ๋๋์ง ๊ถ๊ธํฉ๋๋ค. mongoose๊ฐ semver๋ฅผ ๋ฐ๋ฅด๊ณ ์๋ค๋ฉด ์ฌ์ ํ 4.x ๋ถ๊ธฐ์ ์์ด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ 5.x๊ฐ ๋ฆด๋ฆฌ์ค๋ ๋๊น์ง ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ์งํ๋ฉด์ ์๋ํด์ผ ํฉ๋๋ค.
๋ณ๊ฒฝ ์์ฒด์ ๊ด๋ จํ์ฌ ๋ณ๊ฒฝ ๋ก๊ทธ์ ์ธ๊ธ๋ ๊ฒ ์ธ์๋ ์ด ๋ณ๊ฒฝ๊ณผ ๊ด๋ จํ์ฌ ์๋ฌด ๊ฒ๋ ๋นจ๋ฆฌ ์ฐพ์ ์ ์๋ค๋ ๊ฒ์ด ๋ค์ ์ง์ฆ์ค๋ฝ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝํ๋๋ผ๋ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์ฌ๊ธฐ ์ฌ๋ฌ ์ฌ๋๋ค์ ๋ฐ๋ฅด๋ฉด .model()
ํธ์ถ ๋๋ฌธ์
๋๋ค.
๋ํ ๋ฌธ์์๋ mongoose.connect()
๋ฐ mongoose.model()
๊ฐ ํ์๋์ด ์ด ๋ฌธ์ ๋ฅผ ๋์ฑ ํผ๋์ค๋ฝ๊ฒ ๋ง๋ญ๋๋ค. mongoose.connect()
๋ณ๊ฒฝ ์ฌํญ์ ์ฐ๊ฒฐ ํ์์๋ง ์ธ๊ธ๋๋ฉฐ ์ด ํ์ด์ง ์ ๋ค๋ฅธ ๋ถ๋ถ์์๋ ์ธ๊ธ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฌธ์ ๋ ๋จ์ ์์ต๋๋ค. ์ด ๋ณ๊ฒฝ์ด ๋ฒ๊ทธ์
๋๊น, ์๋๋ฉด ์๋๋ ๊ฒ์
๋๊น?
์ด๋๋ก ๊ฐ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ด๋ฒ ์ฃผ๋ง์ MongoDB์ Atlas์ ์ฐ๊ฒฐํ๋ ๋ฐ ๋ ๋ง์ ์๊ฐ์ ํ ์ ํ์ต๋๋ค. ๋ค์ดํฐ๋ธ mongodb ๋๋ผ์ด๋ฒ๋ ์ฆ์ CRUD๋ฅผ ์คํํ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ชฝ๊ตฌ์ค๋ฅผ ์คํํ๋ ๊ฒ์ ์์ ํ ์ ๋ชฝ์ ๋๋ค. 4.11์์ createConnection์ ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋ฉ๋๋ค.
MongoError: connection 4 to cluster0-myshard.mongodb.net:27017 closed
๋๋ ๋ค์์ ์ค์ ํ ์ ์์ต๋๋ค.
useMongoClient: true
ํ์ง๋ง ๋๋ connection.model์์ ์ ์๋์ง ์์์ต๋๋ค.
<info> atlas-api-test.js:65 (Test.testVendors) conn.model undefined
@Archomeda ๋ 4.x์์ ๋ ๊ฑฐ์ ์ฐ๊ฒฐ ๋์์ ์ ๊ฑฐํ ๊ณํ์ด ์์ผ๋ฉฐ 5.x๋ ์ ์ฐ๊ฒฐ ๋
ผ๋ฆฌ๋ฅผ ์์ ์ ์ธ ์ํ๋ก ๊ฐ์ ธ์ค๋ ๋ฐ ์ฐจ๋จ๋ฉ๋๋ค. ์ฐ๊ฒฐ ๋ฌธ์ ์๋ 4.11.1์์ ๊ฐ์ ํ ๋ฌธ์๊ฐ ์์ผ๋ฉฐ ์ด์ ๋ํ ๋งํฌ๊ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค. Re: model()
ํธ์ถ์์ useMongoClient: true
๋ฅผ ์ง์ ํ๋ฉด createConnection()
๋ ์ฐ๊ฒฐ์ ๋ฐํ ํ์ง ์๊ณ .then()
์ ํ์ํ ์ฐ๊ฒฐ๋ก ํ์ธ๋๋ ์ฝ์์ ๋ฐํํฉ๋๋ค. https://github.com/Automattic/mongoose/issues/5404#issuecomment -312522539์ ์ค๋ช
๋์ด ์์ต๋๋ค. ๋ฌธ์ #5404 ์์ ์ด์ ๋ํ ์ฐ๋ ค ์ฌํญ์ ์์ ๋กญ๊ฒ ๋ง์ํด ์ฃผ์ญ์์ค.
@mkastner ๋ createConnection()
๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. useMongoClient: true
๋ฅผ ์ฌ์ฉํ๋ฉด $ createConnection()
์ฐ๊ฒฐ๋ก ํ์ธ๋๋ ์ฝ์์ ๋ฐํํฉ๋๋ค. await mongoose.createConnection()
๋๋ mongoose.createConnection().then()
์ฌ์ฉํ์ธ์.
@peterpeterparker #5404๋ 4.11.1์์ ์์ ๋ ์๋ก์ด ์ฐ๊ฒฐ ๋ก์ง์ ๋ฌธ์ ์ ์ ์ง์ ํ์ผ๋ฉฐ, ์ด๋ ํฅํ 24์๊ฐ ์ด๋ด์ ๊ณต๊ฐ๋ ์์ ์ ๋๋ค.
@cosminn777 ์ด๋ค ์ํคํ
์ฒ ๋ฌธ์ ๊ฐ ์์ต๋๊น? ๋ณ๋์ ๋ฌธ์ ๋ฅผ ์ด์ด ๋
ผ์ํ์ญ์์ค. ์ฅ๊ธฐ ๊ณํ์ 5.x์์ Node < 4๋ฅผ ์ง์ํ์ง ์์ผ๋ฏ๋ก mongoose๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ๋์ด ์์ฑ๊ธฐ ๋ฐ/๋๋ async/await์ ๋ํ ๊ธฐ๋ณธ ์ก์ธ์ค ๊ถํ์ ๊ฐ๊ฒ ๋๋ฏ๋ก ์ด ๋ณ๊ฒฝ์ yield
๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋งํผ ์ฌ์ธ ๊ฒ์
๋๋ค. await
๋ฌธ.
@alanpurple ๋ง์ํ์ ๋ฌธ์ ๋ #5404์์ ์ธ๊ธํ ๋ฌธ์ ์ ๋์ผํ๋ฉฐ 4.11.1์์ ์์ ๋ ์์ ์ ๋๋ค.
@itpcc #5432๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ๋ณ๋์ ๋ฌธ์ ๋ฅผ ์ด์์ต๋๋ค. ์ง๊ธ์ URI์ ์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ์ญ์์ค. var dbURL =
mongodb://${dbUser}:${dbPass}@${dbHost}:${dbPort}/${dbName}?authSource= ๊ด๋ฆฌ์`.
์ผ๋ฐ์ ์ผ๋ก ์ด ์๋ก์ด ํ๋์ ์๋ํ๋ ๋ฐ ์ธ๋ด์ฌ์ ๊ฐ์ ธ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ํํ๋ฉด ์ฝ๊ฐ์ ๊ณจ์นซ๊ฑฐ๋ฆฌ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋์ ํ๋๊ทธ ๋ค์ ์ด ๋์์ ์จ๊ฒผ์ง๋ง MongoDB 3.6์ ๋ํ ์ผ๋ถ ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด mongoose์ ๋ด๋ถ ์ฐ๊ฒฐ ๋ ผ๋ฆฌ๋ฅผ ์์ ํ ์ ๊ฒํด์ผ ํฉ๋๋ค. ์๋ก์ด ์ฐ๊ฒฐ ๋ก์ง์ด ์ฅ๊ธฐ์ ์ผ๋ก mongoose ๊ด๋ จ ์ฐ๊ฒฐ ๋ฒ๊ทธ๋ฅผ ์ค์ฌ์ฃผ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ํ์ง๋ง ๋์๊ณผ ๋ฌธ์๋ฅผ ์์ ํ๋ ๋์ ์ํดํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๊ทํ์ ํผ๋๋ฐฑ์ ๋๋จํ ๊ฐ์ฌํฉ๋๋ค.
4.x์ ์๋ ํ ํ์ฌ ์ฐ๊ฒฐ ๋ ผ๋ฆฌ๋ ์๋ํ์ง๋ง ๊ฒฝ๊ณ ๋ง ์ถ๋ ฅํฉ๋๋ค. ๊ทธ ๋์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ณ๋์ github ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
๋ฐฉ๊ธ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ฑํํ๊ณ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. ๋ชจ๋ ๊ฐ์ฌํฉ๋๋ค!
@vkarpov15 ์ค๋ช ๊ฐ์ฌํฉ๋๋ค.
์ฐธ๊ณ ๋ก openSet
์์๋ ๋์ผํ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํฉ๋๋ค(๋ณต์ ์ธํธ๋ฅผ ์ฌ์ฉ ์ค์
๋๋ค).
์์ฝํ์๋ฉด ์ด ๊ฒฝ๊ณ ๋ Mongoose์ ๋ด๋ถ ์๋์๋ง ๊ด๋ จ๋๋ฏ๋ก ์ง๊ธ์ ๋ฌด์ํ๋ ๊ฒ์ด ์์ ํ๋ฉฐ useMongoClient
๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ์์ง ํ์ง ์์๋ ๋ฉ๋๋ค.
์ผ๋ง๋ ์์ ์ ์ด๋ผ๊ณ ์๊ฐํ์ญ๋๊น? ์ฌ์ฉํด๋ ์์ ํ๊ฐ์? ์ฐ๋ฆฌ์ ๋ชจ๋ ๋ชจ๋ธ๊ณผ ์ฐ๊ฒฐ ๋ก์ง์ ๋ฆฌํฉํ ๋งํ๋ ๋ฐ 2์๊ฐ์ ์๋นํ์ฌ ์์ง ํ๋ก๋์ ์์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ํ์ธํ๊ณ ์ถ์ง๋ ์์ต๋๋ค.
ํ๋๊ทธ ์ฌ์ฉ์ด ์์ ์ ์ด๊ณ ์์ผ๋ก ๊ถ์ฅ๋๋ ์ฐ๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ ๋๊น์ง ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๊น? ์๋๋ฉด ์ด๋ฏธ ๊ทธ ์ง์ ์ ๋๋ฌํ์ต๋๊น?
@vkarpov15
ํ์ง๋ง createConnection์์ ๋น๋๊ธฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. db ์๋ฒ์ ๋ํด ๋ ๊ฐ์ง ํ ์คํธ๋ฅผ ์ค์ ํ์ต๋๋ค. ์ฒซ ๋ฒ์งธ๋ URL์ด ์๋ํ๊ณ ๋ด๊ฐ ์ฐ๊ณ ์ฝ์ ์ ์๋์ง ํ์ธํ๊ธฐ ์ํ ๊ธฐ๋ณธ mongo-js ์นด๋๋ฆฌ์ ํ ์คํธ์ ๋๋ค.
tape('test connection via mongo native', async function testMongoConnection(t) {
try {
t.plan(1);
let db = await MongoClient.connect(dbURL);
await db.collection('users').insert({name: 'username'});
let result = await db.collection('users').find({});
let docs = await result.toArray();
log.info('result', await result.toArray());
t.equal(1, docs.length);
db.collection('users').remove({});
await db.close();
} catch (err) {
console.error(err)
}
});
๊ฒฐ๊ณผ:
2017-07-04T09:00:34+0200 <info> atlas-api-test.js:28 (Test.testMongoConnection) result [ { _id: 595b3d1146734207bad88f9d, name: 'username' } ]
โ should be equal
await์ ํจ๊ป mongoose createConnection์ ์ฌ์ฉํ์ฌ mongoose ํ ์คํธ์ ์ฑ๊ณตํ์ต๋๋ค.
tape('test connection via mongoose', async function testMongooseConnection(t) {
try {
let conn = await mongoose.createConnection(dbURL, {
useMongoClient: true,
/*
// tried these settings too
user: 'myUserName',
pass: 'myPassword',
connectTimeoutMS: 30000,
rs_name: 'myReplSetName',
ssl: true,
auto_reconnect: true,
*/
});
let UserSchema = new mongoose.Schema({
name: String,
});
let User = mongoose.model('User', UserSchema);
let newUser = new User({name: 'username'});
let createdUser = await newUser.save();
// just ending test without validating any results
t.end();
} catch (err) {
log.error(err);
}
});
๊ทธ๋ฆฌ๊ณ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
/mypath/node_modules/mongodb/lib/replset.js:390 process.nextTick(function() { throw err; })
^
MongoError: connection 8 to cluster0-shard-00-02-c4nst.domain.com:27017 closed at Function.MongoError.create (/mypath/node_modules/mongodb-core/lib/error.js:29:11)
at Socket.<anonymous> (/mypath/node_modules/mongodb-core/lib/connection/connection.js:202:22)
at Object.onceWrapper (events.js:316:30)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at TCP._handle.close [as _onclose] (net.js:549:12)`
๋๋ ์ฌ๊ธฐ์ ํฌ๊ฒ ํ๋ฆด ์ ์์ง๋ง ๋์๊ฒ๋ ๋น๋๊ธฐ/์ฝ์ ๋ฌธ์ ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค.
์ ๋ ๋ชฝ๊ณ ์ํ๋ผ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. {useMongoClient: true}๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด ์ฑ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ๋์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ตํ์ง ์์ต๋๋ค.
๋ด ์ฝ๋:
mongoose.connect(config.dbhost, {useMongoClient: true}, function(err){
if(err){
console.log(err);
} else {
console.log('connected to the database successfuly.');
}
});
์ฌ๊ธฐ์ ์ธ๊ธ๋ ๊ฒ์ ๋ณด์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ฌ๋์ ์ํ ์๋ฆผ์ ๋๋ค. 4.11.1์ด ๋ฆด๋ฆฌ์ค๋์์ผ๋ฉฐ ๊ฐ๋ตํ ์ดํด๋ณธ ํ์ useMongoClient=true๋ฅผ ์ฌ์ฉํ ๋ ๋ฒํผ๋ง ๋ฌธ์ ๊ฐ ์์ ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด์ผ ๋ ํ ์คํธํ๊ฒ ์ต๋๋ค. ๋ค๋ฅธ ๋๊ตฐ๊ฐ?
์ต์ข ํด๊ฒฐ์ฑ ์ ๋ฌด์์ ๋๊น?
์ด๊ฒ์ ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค (v.4.11.1).
๋ฐ์ดํฐ๋ฒ ์ด์ค.js
mongoose.connect(databaseUri, { useMongoClient: true })
.then(() => console.log(`Database connected at ${databaseUri}`))
.catch(err => console.log(`Database connection error: ${err.message}`));
user.model.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({ ... });
const User = mongoose.connection.model('User', userSchema);
๋ชจ๋ธ์ ์ด๊ธฐํํ ๋ ์ฐ๊ฒฐ ์ฐธ์กฐ๊ฐ ํ์ํ์ง ์์ ์ ์์ต๋๋ค( @kyrylkov @peterpeterparker์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค).
user.model.js
const User = mongoose.model('User', userSchema);
๋๊ตฐ๊ฐ { useMongoClient: true }๊ฐ ์ ํํ ๋ฌด์์ ์ํ ๊ฒ์ธ์ง ๋๋ ๊ทธ ํ๋๊ทธ๊ฐ ๋ฌด์์ ํ๋์ง ๊ฐ๋จํ ์ค๋ช ํ ์ ์์ต๋๊น?
์กฐ๊ธ ๊ธธ์ ์๋๋ค, ๊ทธ๊ฒ์ ์ฌ์ฉ์ ์ฅ์ ์ ๋ฌด์์ ๋๊น?
๋ด ๋ง์, ๋ด๊ฐ ์ ์ ๋งํ๋ฏ์ด, ๋๋ ๊ฒฝ๊ณ ์ ํจ๊ป ์ด ์ ์์ผ๋ฏ๋ก ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ ์๋๋ฅผ ๋๋ผ์ง ์์ต๋๋ค.
๋ฌธ์์์ ๊ทธ๋ ๊ฒ ๋ง์ด ์ฐพ์ง ๋ชปํ์ต๋๋ค. ๋ฏธ๋ฆฌ ์ ๋ฆฌํ๊ธฐ ์ํด thx.
@Blackbaud-SteveBrush ์๋ํ์ง ์์ต๋๋ค. ์ ๋ ๋ชฝ๊ณ ์ํ๋ผ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ ์๋ํ์ง ์์ต๋๊น?
@Thinkdiff
์ด๋ป๊ฒ ์๋ํ์ง ์์ต๋๊น? ํ์์ ๊ฐ์ด mLab ๋ฐ MongoDB Atlas์์ ์๋ํฉ๋๋ค.
const User = mongoose.model('User', userSchema);
๋์ ์:
const User = mongoose.connection.model('User', userSchema);
URI์ ์ ์๋ ํธ์คํธ๊ฐ ๊ฑฐ์ ์๋ useMongoClient ์ต์
์ ํ์ฑํํ๋ ค๊ณ ํ๋ฉด ์ค๋จ๋๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
MongoError: no mongos proxy available at Timeout._onTimeout (/home/ubuntu/code/pss/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/mongos.js:636:28) at ontimeout (timers.js:386:14) at tryOnTimeout (timers.js:250:5) at Timer.listOnTimeout (timers.js:214:5) name: 'MongoError', message: 'no mongos proxy available'
์ฐ๋ฆฌ: mongodb://10.0.1.49 ,10.0.2.158,10.0.3.84/pss
์ต์
: { useMongoClient: true, autoReconnect: true, keepAlive: 300000, connectTimeoutMS: 30000 }
๊ด์ฌ ์๋ ์ฌ๋์ ์ํด ๋ค์์ useMongoClient
๋งค๊ฐ๋ณ์์ ๋ํ Mongoose ๋ฌธ์์
๋๋ค. http://mongoosejs.com/docs/connections.html#use -mongo-client
"Mongoose์ ๊ธฐ๋ณธ ์ฐ๊ฒฐ ๋ ผ๋ฆฌ๋ 4.11.0๋ถํฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค...์ด ์ฌ์ฉ ์ค๋จ์ MongoDB ๋๋ผ์ด๋ฒ๊ฐ MongoDB 3.6์ ์ง์ํ๋ mongoose์ ์ฐ๊ฒฐ ๋ ผ๋ฆฌ์ ์ค์ํ API๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ด github ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ธ์." GitHub ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://github.com/Automattic/mongoose/issues/5304
@Blackbaud-SteveBrush ์ง์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๊ทธ๋์ ๋ด๊ฐ ์ ๋๋ก ์ดํดํ๋ค๋ฉด
useMongoClient = true => Mongo 3.6์์๋ ์๋ํ๋ ์ ์ฐ๊ฒฐ ๋
ผ๋ฆฌ ํ์ฑํ
useMongoClient = false => ๊ธฐ๋ณธ๊ฐ. ์ด์ ์ฐ๊ฒฐ ๋
ผ๋ฆฌ < 4.11.0. ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ.
์ค๋ฅธ์ชฝ?
@Blackbaud-SteveBrush ์ฝ๋ ์กฐ๊ฐ์ ๋ํด ์ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
const User = mongoose.connection.model('User', userSchema);
ํ์ง๋ง
const User = mongoose.model('User', userSchema);
๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ฌ์ ํ โโโโ์ฑ๊ณต์ ์ด์์ต๋๋ค. ๊ณ ๋ง์
๋ชฝ๊ตฌ์ค๋ ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค 4.10.8 :|
๋๋ ์ด๊ฒ์ด ๋ชฝ๊ตฌ์ค์ ๋ฒ๊ทธ ์ผ ๊ฐ๋ฅ์ฑ์ด ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋ชฝ๊ตฌ์ค ๋ฒ์ ์ ๋กค๋ฐฑ ํ ํ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
npm ์ ๊ฑฐ - ๋ชฝ๊ตฌ์ค ์ ์ฅ
npm ์ค์น - [email protected] ์ ์ฅ
์ด ๊ฒฝ๊ณ ๋ฅผ ์์ ํ ๋ฌด์ํ์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์๋ํ๊ณ ์์ต๋๋ค. ์๋ง๋ ์ด๊ฒ์ด ํ์ฌ ์๋ฃจ์ ์ ๋๋ค. ๊ทธ๋ฅ ๋ฌด์ํด.
4.10.8๋ก ๋กค๋ฐฑํ๋ฉด ์ฐ๊ฒฐ์ด ๋ค์ ์๋ํ์ง๋ง ์ฌ์ ํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Db.prototype.authenticate method will no longe against users in the admin db and will no long connect with auth credentials.
@peterpeterparker ๋ง์ต๋๋ค. ๋ด ์ดํด์ ๋ฐ๋ฅด๋ฉด Mongoose์ ํ์ฌ ์ธ์ฆ ์ฝ๋๋ mongodb 3.6์์ ์๋ํ์ง ์์ผ๋ฏ๋ก useMongoClient
๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ์งํ๋ฉด์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ ์ฐ๋ฆฌ๋ฅผ ๋ํ๋
๋๋ค. ๋ด๊ฐ ์๋ ํ mongodb 3.6์ ๋ํ ์์ ๋ ๋ฆด๋ฆฌ์ค ๋ ์ง๊ฐ ์์ง ์์ผ๋ฏ๋ก ์ ํ์ด ํ์ํ์ง ์์ต๋๋ค.
@adamreisnz ์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ๋ฒ๊ทธ๊ฐ ์์์ง๋ง ์ค์ ๋ก ์๋ก์ด ์ฐ๊ฒฐ ๋ก์ง์ ๋ค์ดํฐ๋ธ ๋๋ผ์ด๋ฒ์ MongoClient.connect() ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋งค์ฐ ์์ ๋ํผ์
๋๋ค. ์ด๊ฒ์ ํ์ฌ ๋ช ๋
๋์ mongodb์ ์ฐ๊ฒฐํ๋ ๋ฐ ์ ํธ๋๋ ๋ฐฉ๋ฒ์ด์์ต๋๋ค. ์ฐ๊ฒฐ์ด ์ค์ ๋๋ฉด ์ฐ๊ฒฐ์ ์ ์งํ๋ ๋์ผํ mongodb ๋๋ผ์ด๋ฒ ๋
ผ๋ฆฌ๊ฐ ์ค์ ๋ฉ๋๋ค. useMongoClient
๋ ์ด๊ธฐ ์ฐ๊ฒฐ์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
@vkarpov15 ์ค๋ช ๊ณผ ์์ ์ ๋ํ ๋ง์ thx, ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!
@vkarpov15 ๊ฐ์ฌํฉ๋๋ค useMongoClient
๋ฅผ ์ฌ์ฉํด ๋ณด๊ณ ์ด๋๋ก ๊ฐ๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.
const ๋ชฝ๊ตฌ์ค = ์๊ตฌ("๋ชฝ๊ตฌ์ค");
const db = " mongodb://localhost/testaroo ";
mongoose.connection.openUri(db);
mongoose.connection.once("์ด๊ธฐ", ํจ์() {
console.log("์ฐ๊ฒฐ ์ค์ ๋จ");
}).on("์ค๋ฅ", ํจ์(์ค๋ฅ) {
console.log(์ค๋ฅ);
})
--๋๋ ์ด๊ฒ์ ์ฌ์ฉํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋์ง ์์์ต๋๋ค.
var mongoose = require('mongoose');
mongoose.Promise = global.Promise;
var mongoDB = mongoose.connect('mongodb://your_database', {
useMongoClient: true
});
mongoDB
.then(function (db) {
console.log('mongodb has been connected');
})
.catch(function (err) {
console.log('error while trying to connect with mongodb');
});
module.exports = mongoDB;
๋๋ ์ด๊ฒ์ ์ฌ์ฉํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋์ง ์์์ต๋๋ค
@vitorbarros ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค. ๊ฐ์ฌ ํด์!
๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค:
http://mongoosejs.com/docs/connections.html#use-mongo-client
์ด ๋น ๋ฅธ ํ ์คํธ๋ฅผ ์คํํ๊ณ ์๋ํ์ต๋๋ค.
// index.js
const mongoose = require('mongoose')
mongoose.Promise = global.Promise;
const db = mongoose.createConnection(`mongodb://localhost/test`)
db.on('error', err => console.log(err))
db.once('open', () => {
console.log(`Connected to Mongo at: ${new Date()}`)
db.close(() => {
console.log(`Disconnected from Mongo at: ${new Date()}`)
})
})
node index.js
๋ ๋ค์์ ์ ๊ณตํฉ๋๋ค.
Connected to Mongo at: Thu Jul 13 2017 22:54:50 GMT+0000 (UTC)
Disconnected from Mongo at: Thu Jul 13 2017 22:54:50 GMT+0000 (UTC)
๋ค๋ค ๊ฐ์ฌ ํด์!
@vitorbarros ์๋ฃจ์ ์ด ์๋ํฉ๋๋ค! ๊ฐ์ฌ ํด์.
4.11.3์์ @vitorbarros ๊ฐ ์ ์ํ ๊ฒ์ผ๋ก ์ฐ๊ฒฐ ๋ก์ง์ ๊ต์ฒดํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ์ ๊ฑฐ๋๊ณ ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค ๐
์ด ์ค๋ ๋์ ์๋ถ๋ถ์์ ์ ์ํ ๋๋ก ๋ชจ๋ธ ์ฐธ์กฐ๋ฅผ ๋ฆฌํฉํ ๋งํ ํ์๊ฐ ์์ต๋๋ค.
@vitorbarros ์ ์๋ฃจ์
์ ์ค์ ๋ก " useMongoClient
Option" ๋ฌธ์ ์ ๋ฐ๋ฅด๋ฉด ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์
๋๋ค.
๊ทธ๋ฌ๋ mongoose.Promise = global.Promise;
๋ ๊ธฐ๋ณธ Mongo ๋๋ผ์ด๋ฒ๋ฅผ ์ฝ์ํ์ง _์์ต๋๋ค_ . "Promises for the MongoDB Driver" ๋ฌธ์ ์ ๋ฐ๋ฅด๋ฉด promiseLibrary
์์ฑ๋ connect
๋ฉ์๋์ options ๊ฐ์ฒด์์ ์ค์ ํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด:
var mongoDB = mongoose.connect('mongodb://your_database', {
useMongoClient: true,
promiseLibrary: global.Promise
});
global.Promise
๋ ๊ธฐ๋ณธ ์ฝ์ ์์ง์ ์ฌ์ฉํฉ๋๋ค. ๋น์ฐํ Bluebird ๋๋ ๋ค๋ฅธ ์์ง(์: promiseLibrary: require('bluebird')
)์ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
@vitorbarros ์๋ฃจ์
์ด ์ ์๊ฒ ํจ๊ณผ์ ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ @boaz-amit์ด ๋งํ ๊ฒ์ฒ๋ผ promiseLibrary๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ธ์ฆ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น?
URL์์
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
๋๋ ์ต์ ์์ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ ์ ์ค์ ํ์๊ฒ ์ต๋๊น? ์ง๊ธ์ ์ ๋นํ ์ฅ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์ธ์ฆํ๋ ๋ฐฉ๋ฒ ์ ํ ๊ฐ์ง๋ฟ์ ๋๊น?
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ ๋ด ์๋ฃจ์ ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ฒซ ๋ฒ์งธ ์ฐ๊ฒฐ์ด ์คํจํ ๊ฒฝ์ฐ์๋ ์๋ํฉ๋๋ค.
let firstConnectTimeout = null;
const mongoConnect = () => {
const mongoDB = mongoose.connect('mongodb://localhost/test', {
useMongoClient: true
});
mongoDB
.then((db) => {
clearTimeout(firstConnectTimeout);
})
.catch((err) => {
firstConnectTimeout = setTimeout(mongoConnect, 5000);
});
};
mongoConnect();
URL์ ์์ด์ผ ํ๋ฉฐ ์ฌ์ฉ์/ํจ์ค ์ต์
์ด ๋ ์ด์ ์๋ํ์ง ์์ต๋๋ค.
useMongoClient true ์ฐพ์์ต๋๋ค.
2017๋
7์ 17์ผ ์์์ผ, 20:28 Andrey Prisniak [email protected]
์ผ๋ค:
@vitorbarros https://github.com/vitorbarros ์๋ฃจ์ ์ด ์ ์๊ฒ ํจ๊ณผ์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ
๋ํ @boaz-amit์ ๊ฐ์ promiseLibrary๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
https://github.com/boaz-amit ๋งํ๋ค.
๊ทธ๋ฌ๋ ์ธ์ฆ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? URL์์
mongodb://[ ์ฌ์ฉ์ ์ด๋ฆ:๋น๋ฐ๋ฒํธ@
]ํธ์คํธ1[:ํฌํธ1][,ํธ์คํธ2[:ํฌํธ2],...[,ํธ์คํธN[:ํฌํธN]]][/[๋ฐ์ดํฐ๋ฒ ์ด์ค][?์ต์ ]]
๋๋ ์ต์ ์์ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ ์ ์ค์ ํ์๊ฒ ์ต๋๊น? ๋ง๋ ํ ๊ณณ์ ๋ชป์ฐพ๊ฒ ์ด
์ง๊ธ.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/Automattic/mongoose/issues/5399#issuecomment-315694642 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAd8Qup1YY4lhUhQccv2kLKtraARxvP0ks5sOxs_gaJpZM4OEnIt
.
@adamreisnz @aprisniak์ด ์์
์ค์
๋๋ค. #5419๋ฅผ ์ฐธ์กฐํ์ธ์. ๊ทธ ๋์ URI์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ์ธ์. mongodb://user:pass<strong i="7">@hostname</strong>:port/db
๋ํ ์ด ์ต์ ๊ณผ ์ ํ์ํ์ง์ ๋ํ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์์ฑํ์ต๋๋ค. http://thecodebarbarian.com/mongoose-4.11-use-mongo-client.html
@vkarpov15 URI์์ user:pass ๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ฌ์ ํ ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค.
gridfs-stream๊ณผ ํจ๊ป ๋ชฝ๊ตฌ์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ ์ํด:
const mongooseConnect = mongoose.connect(
process.env.MONGODB_URI || process.env.MONGOLAB_URI,
{
useMongoClient: true
}
)
let gfs
mongooseConnect.then(conn => {
gfs = Grid(conn.db)
/** Setting up GFS storage here */
})
ํ์ดํํ ๋ ๋๋ฝ๋ ์ฐ๊ฒฐ ์ต์ "useMongoClient"๋ฅผ ์ถ๊ฐํ๊ณ ํ์ดํ ํจํค์ง๋ฅผ ์ถ๊ฐํ๋ ๋์ ์ด ํ๋ก์ ํธ์ ํ์ดํ์ ๋ค์ ์ถ๊ฐํ์ธ์.
์ด ๊ฒฝ๊ณ ์ ํจ๊ป ์กฐ์น๋ฅผ ์ทจํด์ผ ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ณ ์ณ์ง๊ฒ ์ฃ ?
์๋ํ๋๋ก ํ์ดํ์ useMongoClient๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. @iamdubx
@FinalDes ์ด๋ป๊ฒ? mongoose.connect(process.env.DATABASE, { useMongoClient: true })
๋ฅผ ์ถ๊ฐํ์ง๋ง ์ฌ์ ํ ๋ฉ์์ง๋ฅผ ๋ฐ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ URI์์ user:pass ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํ๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋ค์ ๋ ๋ช
๋ น์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
npm ์ ๊ฑฐ - ๋ชฝ๊ตฌ์ค ์ ์ฅ
npm ์ค์น - [email protected] ์ ์ฅ
์ฃผ์: [email protected] ์ ์์ ์ ์ธ ๋ฒ์ ์ ๋๋ค.
์คํค๋ง ๋ฐ ๋ชจ๋ธ ์์ฑ ๋ฐ ์ก์ธ์ค๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๊ณ ๊ณ์ญ๋๊น?
์ค๋ ๋์ ๋ชจ๋ ์์ ์ ์๋ํ์ต๋๋ค. ๊ฒฝ๊ณ ์ ํจ๊ป ๋ชจ๋ ๊ฒ์ด ์ ์๋ํฉ๋๋ค. useMongoClient: true
๋๋ mongoose.createConnection
๋ฅผ ์๋ํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ์ ๊ฑฐ๋๊ณ db์ ์ฐ๊ฒฐํ ์ ์์ง๋ง ๋ชจ๋ธ์ ์ก์ธ์คํ๋ ค๋ ์ฝ๋๋ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ต๋๋ค. ์ค๋ฅ๊ฐ ์์ผ๋ฉฐ ์ฝ๋๊ฐ ์คํ๋์ง ์์ต๋๋ค.
@iamdubx
ํ์ดํ์ด ๋๋ฝ๋์์ผ๋ฏ๋ก "noImplicitAny": true ๋ก ์คํํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
์์ ๋ชฝ๊ตฌ์ค = ์๊ตฌ("๋ชฝ๊ตฌ์ค");
๊ฐ์ ธ์ค๊ธฐ dotenv = ์๊ตฌ("dotenv");
dotenv.config();
๋ชฝ๊ตฌ์ค.์ฝ์ = ์ ์ญ.์ฝ์;
const MONGO_URI=`mongodb://${process.env.MONGODB_HOST}:${process.env.MONGODB_PORT}/${process.env.MONGODB_DB}`;
mongoose.connect(MONGO_URI, {
useMongoClient: ์ฐธ,
});
@FinalDes ๋ฌด์์ ๋ง์ํ์๋ ๊ฑด๊ฐ์? ๋๋ฝ ๋ ์ ๋ ฅ์ ๋ฌด์์ ๋๊น? ์์ ๊ฐ์ ์ฝ๋๊ฐ ์๊ณ ์ค๋ฅ๊ฐ ์์ต๋๋ค.
@Snow-Okami์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
const mongoDB = mongoose.connect(config.database, {
useMongoClient: true
});
const mongoDB = mongoose.connect(config.database, function(){
useMongoClient: true
});
์ ์ด๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ๊ณตํ์ญ์์ค. ํ๋ก๋์
๋น๋ ์๋ฒ๊ฐ ์คํจํฉ๋๋ค.
๊ธฐ๋ฅ ์
๋ฐ์ดํธ๋ ์ข์ง๋ง ๋ฉ์๋ ์๋ช
์ด๋ ํธ์ถ์ ๋ณ๊ฒฝํ์ง ๋ง์ญ์์ค.
@Nikunjksanghavi ๊ทธ๊ฒ์ ๋จ์ง ๊ฒฝ๊ณ ์ผ ๋ฟ์ด๊ณ ์๋ฌด ๊ฒ๋ ์คํจํด์๋ ์๋ฉ๋๋ค.
@iamdubx ์ด๋ค ์ข ๋ฅ์ ์ค๋ฅ์ ๋๊น?
@FinalDes ์ฌ์ฉ ์ค๋จ ์ค๋ฅ, ์ด ์ฃผ์ ์์ ์ฐ๋ฆฌ๊ฐ ๋งํ๋ ๋ค๋ฅธ ๊ฒ์ ๋ฌด์์ ๋๊น?
์ด๊ฒ์ ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค : (v.4.11.4)
const MONGO_URI = process.env.MONGO_URI
const mongoose = require('mongoose');
// Use your own promis library
mongoose.Promise = require('bluebird');
// connect to mongo, use Mongo Client
mongoose.connect(MONGO_URI, {useMongoClient: true})
.then(({db: {databaseName}}) => console.log(`Connected to ${databaseName}`))
.catch(err => console.error(err));
const poemSchema = mongoose.Schema({
name: String,
text: String
});
const Poem = mongoose.model('Poem', poemSchema);
const insertPoem = poem =>
(new Poem(poem)).save( (err, newPoem) =>
console.log(err || newPoem));
insertPoem({name: 'poemName', text: 'this is a poem'})
// DB ์ฐ๊ฒฐ
var ๋ชฝ๊ตฌ์ค = ์๊ตฌ('๋ชฝ๊ตฌ์ค');
๋ชฝ๊ตฌ์ค.์ฝ์ = ์ ์ญ.์ฝ์;
mongoose.connect('mongodb://localhost/login_register', {
useMongoClient: ์ฐธ
})
.then(() => console.log('์ฐ๊ฒฐ ์ฑ๊ณต'))
.catch((err) => console.error(err));
// DB ์ฐ๊ฒฐ ์ข
๋ฃ
์ด๊ฒ์ ๋๋ฅผ ์ํด ์๋ํ์ง ์์ต๋๋ค. ์ฌ์ ํ ์ฝ์ ๊ฒฝ๊ณ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ช ํํ ์ค๋ช ์ด ์ ๊ณต๋์ง ์์ต๋๋ค.
๋ชฝ๊ตฌ์ค๋ ๋์ฐํฉ๋๋ค. ๋ํ ๋ด๊ฐ ๊ทธ๋ ๊ฒ ์ธ๊ธฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ณธ ์ต์ ์ ๋ฌธ์ ์ฌ์ดํธ์ ๋๋ค. ๋ถ๋๋ฌ์ด ์ผ์ด์ผ!
์ด์ RethinkDB๋ก ์ ํํ ์๊ฐ์
๋๋ค. Linux Foundation - ์ด๊ฒ์ ์ฌ๊ฐํฉ๋๋ค.
์ญ์ Postgre ๊ต์ฅํฉ๋๋ค.
๋ชฝ๊ณ - ๋งค์ฐ, ๋งค์ฐ ๋ถ๋๋ฝ์ต๋๋ค.
@iamdubx ์์ ๋ด ์๋ฃจ์ ์ ์๋ ํ์ต๋๊น? ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๊น? ๋์์ด ๋ ์ ์์ ๊ฒ ๊ฐ์์ :)
@iamdubx ๊ฐ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๊ฒ์ํ ์ ์์ต๋๊น?
@FinalDes @shams-ali ์ ์ ๊ฒ์ํ๋๋ฐ ์ฃผ์ ์ ๋์ผํ ์ง์ ์ค๋จ ์ค๋ฅ์ ๋๋ค. ์ด๋ฒ ์ฃผ์ ๋ ๋ฐ๋ก!
(node:3304) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client
Server listening on port: 7777
Db.prototype.authenticate method will no longer be available in the next major release 3.x as MongoDB 3.6 will only allow auth against users in the admin db and will no longer allow multiple credentials on a socket. Please authenticate using MongoClient.connect with auth credentials.
@iamdubx ํฅ๋ฏธ๋กญ์ต๋๋ค. ๊ทธ๊ฒ์ ์ ๊ฐ ๊ฐ์ง ๊ฒ๊ณผ ๋์ผํ ๊ฒฝ๊ณ ์ด๋ฉฐ ์ ๊ฐ ๊ฒ์ํ ์์ ์๋ฃจ์ ์ด ์ ๋ฅผ ์ํด ๊ทธ๊ฒ์ ๊ณ ์น ๊ฒ ๊ฐ์์ต๋๋ค. ์๋ํ์ง ์๋ ์ ๋ฐ์ดํธ๋ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๊น?
์ด๊ฒ์ด ๋๋ฅผ ์ํด ์ผํ ๊ฒ์ ๋๋ค.
// ES6 promises
mongoose.Promise = Promise;
// mongodb connection
mongoose.connect("mongodb://localhost:27017/sandbox", {
useMongoClient: true,
promiseLibrary: global.Promise
});
var db = mongoose.connection;
// mongodb error
db.on('error', console.error.bind(console, 'connection error:'));
// mongodb connection open
db.once('open', () => {
console.log(`Connected to Mongo at: ${new Date()}`)
});
@afoke ๋ ์๋ํฉ๋๋ค ๊ฐ์ฌํฉ๋๋ค
@FinalDes ๋ฐ๊ฐ์์ ์น๊ตฌ.
์ด๊ฒ์ ๊ฒฝ๊ณ ๋ฐ ์ฌ์ฉ ์ค๋จ์ ์ค์ํ๋ ค๊ณ ํ๋ ๋์ ์๋ก์ด ์ํฌํ๋ก์ ๋๋ค.
// db.js
const model = require('./model');
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
async function db(uri) {
const con = await mongoose
.createConnection(uri, {
useMongoClient: true,
});
const {User} = model(con);
// do something with User
...
// the interface for the server
return {
create: params => User.create(params),
...
};
}
module.exports = db;
์ด์ ๋ชจ๋ธ ๋ชจ๋์ ์ฐ๊ฒฐ ํจ์๋ฅผ ๋ฐํํฉ๋๋ค.
// model.js
const {Schema} = require('mongoose');
const UserSchema = new Schema({
name: String,
age: Number,
});
// Other Schemas
...
module.exports = con => ({
User: con.model('User', UserSchema),
...
});
์ฃผ์ ์ ๋ํ ๊ณต์ ์ง์นจ์ด ์์ต๋๊น?
@iamdubx ๊ฒฝ๊ณ ์ ์ค๋ฅ ์ ์ฐจ์ด์ ์ ์ดํดํ์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฌธ์ ์ ๊ฒฝ๊ณ ๋ ์๋ฌด ๊ฒ๋ ๊นจ๋จ๋ฆฌ์ง ์์ง๋ง ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค์์ ์ ๊ฑฐ๋ ํญ๋ชฉ์ ๋ํด ์ฌ์ฉ์ ์๊ฒ ๊ฒฝ๊ณ ํฉ๋๋ค.
๋ชฝ๊ตฌ์ค๋ ๋์ฐํฉ๋๋ค.
๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๊ฒฝ๊ณ ํ๋ ๊ฐ๋ฐ์์ ๋ํ ์ด๋ฌํ ๋ฐ์์ด ์์์ ๋ช ์ฌํ์ญ์์ค. ๋๋ ๋ํ ๋น์ ์ด ์ด๊ฒ์ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ๊ธฐ์ตํ๊ธฐ๋ฅผ ์ด๊ตฌํฉ๋๋ค. ๊ทธ๋์ ๋น์ ์ด ํ๋ฅผ ๋ด๊ธฐ ์ ์ ๊ฐ๋ฐ์๋ค์๊ฒ ์์ฌ์ ์ด์ต์ ์ค ์ ์์ต๋๋ค.
@chrisdothtml
๋ฌธ์ ์ ๊ฒฝ๊ณ ๋ ์๋ฌด ๊ฒ๋ ๊นจ๋จ๋ฆฌ์ง ์์ง๋ง ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค์์ ์ ๊ฑฐ๋ ํญ๋ชฉ์ ๋ํด ์ฌ์ฉ์์๊ฒ ๊ฒฝ๊ณ ํฉ๋๋ค.
๊ทธ๊ฒ์ ์ฝ๊ฐ ์ฑ๊ฐ์ ํ ์คํธ์ ์ฝ์์ ์ค์ผ์ํต๋๋ค.
๋ชฝ๊ตฌ์ค๋ ๋์ฐํฉ๋๋ค. ๋ํ ๋ด๊ฐ ๊ทธ๋ ๊ฒ ์ธ๊ธฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ณธ ์ต์ ์ ๋ฌธ์ ์ฌ์ดํธ์ ๋๋ค. ๋ถ๋๋ฌ์ด ์ผ์ด์ผ!
๊ทธ๋ ์ฝ๊ฐ ์ฑ๊ฐ์ ๋ฌด๋กํ์ง๋ง ๋ชฝ๊ตฌ์ค ๋ฌธ์์ ๊ด๋ จํ์ฌ ๋งค์ฐ ์ ํจํ ์ง์ ์ ํฉ๋๋ค. ์ต์ ์ ๋ฌธ์๋ ์๋์ง๋ง ์ค์ ๋ก ๊ฐ์ ๋ ์ ์์ต๋๋ค.
mongoose๊ฐ mongo ํด๋ผ์ด์ธํธ API๋ฅผ ์ ๋ฌํ๋ค๋ ์ฌ์ค. ์ด๊ฒ์ ๋งค์ฐ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์๋ํ๋ฏ๋ก Mongoose ์ฌ์ฉ๋ฒ๊ณผ ๋ฌธ์๋ฅผ ํผ๋์ค๋ฝ๊ฒ ๋ง๋ญ๋๋ค.
์ด์ ๋ํ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋๋ ๋ํ ๋ฌธ์๋ฅผ ์ฌ๋ฌ ํ์ด์ง๋ก ๋๋๊ณ Mongoose๊ฐ ์ผ๋ถ ๊ฒฐ๊ณผ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ์ค์ ๋ก ๋ฌด์์ ํ๊ณ ์๋์ง์ ๋ํด ์๋ก์ด ์ฌ์ฉ์์๊ฒ ๋ ๋ง์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ์ฌ ๋ฌธ์ ๊ฒ์ ๊ฐ๋ฅ์ฑ์ ๊ฐ์ ํ ๊ฒ์ ์ ์ํฉ๋๋ค.
์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ฐ {useMongoClient: true} ์ต์
์ ์ถ๊ฐํ ํ ์ฌ๋ผ์ก์ต๋๋ค.
๋๋ Debian 9, ํ
์คํธ ๋ฒ์ , MongoDb ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค. 3.2.11 ๋ฐ ๋ชฝ๊ตฌ์ค ๋ฒ์ . 4.10.4.
'MongoDB์ ์ฐ๊ฒฐํ์ต๋๋ค' ๋ฉ์์ง๊ฐ ์์ต๋๋ค(์๋ Typescript์์ ์ฝ๋ ๋ณด๊ธฐ). ๋ชจ๋ ๊ฒ์ด ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค.
(< ๋ชจ๋ >๋ชฝ๊ตฌ์ค).Promise = global.Promise;
mongoose.connect(process.env.MONGODB_URI, {useMongoClient: true});
const db = mongoose.connection;
db.on('์ค๋ฅ', console.error.bind(์ฝ์, '์ฐ๊ฒฐ ์ค๋ฅ:'));
db.once('์ด๊ธฐ', () => {
console.log('MongoDB์ ์ฐ๊ฒฐ๋จ');
setRoute(์ฑ);
app.get('/*', ํจ์(์์ฒญ, ํด์๋) {
res.sendFile(๊ฒฝ๋ก.join(__dirname, '../public/index.html'));
});
app.listen(app.get('ํฌํธ'), () => {
console.log('MyApp์ด ํฌํธ์์ ์์ ๋๊ธฐ ' + app.get('port'));
});
});
๊ฐ์ง๊ณ ์๋ ํ์ฌ mongoose ๋ฒ์ ์ ์ ๊ฑฐํ๊ณ ๋ ๋ฎ์ ๋ฒ์ npm install [email protected] --save
์ ์ค์นํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๋ค๋ฅธ ์์
์ ์ํํ ํ์๊ฐ ์์ต๋๋ค.
mongoose.connect(database.host, {
useMongoClient: true
});
์ด๊ฒ์ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ํ์ง๋ง ์ด ๋ณ๊ฒฝ ์์ ์ ์ํํ ํ ๋ ๋ค๋ฅธ ๊ฒฝ๊ณ ๊ฐ ํ์๋์์ต๋๋ค.
DeprecationWarning: Mongoose: mpromise(mongoose์ ๊ธฐ๋ณธ ํ๋ผ๋ฏธ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋์ ๊ณ ์ ํ ํ๋ผ๋ฏธ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํ์ธ์. http://mongoosejs.com/docs/promises.html
์ด ์ฝ๋๋ ๋ชจ๋ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
```์๋ฐ์คํฌ๋ฆฝํธ
๋ชฝ๊ตฌ์ค.์ฝ์ = ์ ์ญ.์ฝ์;
mongoose.connect(์ฐ๋ฆฌ, {
keepAlive: ์ฌ์ค,
์ฌ์ฐ๊ฒฐ ์๋ ํ์: Number.MAX_VALUE,
useMongoClient: ์ฐธ
});
````
๋งํฌ๋ก ์์ธํ ์ ๋ณด -> http://mongoosejs.com/docs/connections.html#use -mongo-client
@bricss ํ์์ ์ ๋๋ค! ๊ฐ์ฌ ํด์!
@brics ๋น์ ์ ๋์ ํ๋ฃจ๋ฅผ ๋ง๋ค์์ต๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ์์ ๋ฐฐ์ง๋ฅผ ํ๋ํ์ต๋๋ค...
ํธ์ง: @bricss ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๊ฐ ์ ๊ฑฐ๋์์ง๋ง ๋ด mLab ์๋๋ฐ์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์์์ต๋๋ค. ์ด์ ๋ฒ์ ์ MongoDB๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค. ๋์ค์ ํ์ธํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
ํธ์ง: @bricss ์ด์ ์ต์ mongoose 4.11.9 ๋ฐ Azure์ Cosmos DB ์ฐ๊ฒฐ์์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํฉ๋๋ค.
@bricss : ๋ธ๋ฆญ์ ๋ฉ์ง๊ฒ ์์ฑํ์ต๋๋ค! ๋ด ๋ก์ปฌ์์ ์ ๋ง ์ค๋๋ ๋ฒ์ ์ mongodb๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง:+1:
@brics ๊ต์ฅํด! ๊ทธ๋ฌ๋ "reconnectTries"์ ๋ ์์ ์๋ฅผ ๋ฃ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ต๋๋ค. DB์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค์ ์ฐ๊ฒฐํ๋ ๋ฐ ํ๋ฃจ ์ข ์ผ ๋ณด๋ด๊ณ ์ถ์ง ์์ต๋๋ค.
@afoke ์ ์๋ฃจ์
์ ์ฐ๊ฒฐ ๋ฌธ์์ด(์: mongodb://localhost:27017/test
mongodb://localhost:27017
์ด ์๋)์์ ๋ช
์์ ์ผ๋ก db๋ฅผ ์ ์ธํ ๋๋ง ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค.
์ด ๊ฒฝ๊ณ ์์ด 2๊ฐ์ DB์ ์ฐ๊ฒฐํ ์ ์์ต๋๊น? ๋ด ๋ชจ๋ธ์ ๋ค๋ฅธ DB์ ํจ๊ป ์ฌ์ฉํด์ผ ํฉ๋๋ค.
mongoose v^4.11.6 ์ ์ฌ์ฉํ์ฌ useMongoClient
์ถ๊ฐํ๋ฉด ๊ฒฝ๊ณ ๊ฐ ์ฌ๋ผ์ง๋๋ค.
const uri = "http://blablabla.blo/blaDB";
mongoose.Promise = global.Promise;
mongoose.connection.on('error', (err) => {
console.error(
๋ชฝ๊ตฌ์ค ์ฐ๊ฒฐ ์ค๋ฅ: ${err}`);
process.exit(1);
});
mongoose.connect(uri, {useMongoClient: true});
// load models
require('./model1');
// ...
require('./modelN');`
์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
mongoose.connect(url,{user:'์ฌ์ฉ์ ์ด๋ฆ',pass:'mypassword',useMongoClient:true});
์ด๋ฌํ ์ค๋ฅ๊ฐ ๋ณด์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋์?
์ด ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ ์ด์ "์ฌ์ฉ๋์ง ์๋" ๊ฒฝ๊ณ ๊ฐ ํ์๋์ง ์์ต๋๋ค. ๐
mongoose.connection.openUri('mongodb://localhost/test')
.once('open', () => console.log('Good to go !'))
.on('error', (error) => {
console.warn('Warning', error);
});
์๋์ ๊ฐ์ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ์ ์ง๋ฉดํ์ต๋๋ค.
(node:2300) DeprecationWarning: open()
๋ mongoose >= 4.11.0์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋์ openUri()
๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ connect()
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ useMongoClient
์ต์
์ ์ค์ ํ์ญ์์ค. ๋๋ createConnection()
. http://mongoosejs.com/docs/connections.html#use -mongo-client ์ฐธ์กฐ
ํด๊ฒฐ์ฑ
๋๋ ๋ค์์ ์๋ํ๊ณ ์ ์๋ํฉ๋๋ค. ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค.
mongoose.connect('mongodb://127.0.0.1:27017/your-database-name', { useMongoClient: true, promiseLibrary: global.Promise });
์ด๊ฒ์ด ์ด ๋ฌธ์ ์ ์ง๋ฉดํ ๋ชจ๋ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ง๋ง Mongo Atlas ์๋น์ค์ ์ฐ๊ฒฐํ๋ ค๊ณ ํ ๋ {useMo ngoClient:true } ์ต์ ๊ณผ ์ฐ๊ฒฐ๋์ง ์๊ณ ์ฐ๊ฒฐ์ด ๋ ์ด์ ์คํ๋์ง ์์ต๋๋ค.
๊ฐ์ ๋ฌธ์ ๊ฐ ์๋ ์ฌ๋์ด ์์ต๋๊น?
mongoose.connect๋ฅผ mongoose.createConnection์ผ๋ก ๋ณ๊ฒฝํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
mongoose.createConnection(config.uri, (์ค๋ฅ) => {
๋ง์ฝ (์ค๋ฅ) {
console.log('๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ ์ ์์: ', ์ค๋ฅ);
} ๋ ๋ค๋ฅธ {
console.log('๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋จ: ' + config.db);
}
});
๋๋์ด ๋ฌธ์ ๋ฅผ ๊ทธ๋ ๊ฒ ํด๊ฒฐํ์ต๋๋ค (Mongoose 4.12.0, NodeJS - 7.10.1)
mongoose.Promise = require('bluebird');
mongoose.connect('mongodb://localhost:27017/books_exchange', {
useMongoClient: true,
promiseLibrary: require('bluebird')
}).then(() => {
var userSchema = new mongoose.Schema({
name: String,
password: String
});
var User = mongoose.model('User', userSchema);
var person = new User({
name: "John",
password: "qwerty"
});
person.save().then(() => {
console.log('Data saved');
}).catch(e => {
console.log(e);
});
}).catch(e => {
console.log('Error while DB connecting');
console.log(e);
});
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ๋ํ ๊ฐ์ฅ ์ฌ์ด ์์ ; "
npm remove mongoose
" ๊ทธ๋ฐ ๋ค์ "npm install [email protected] --save
" ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ์ ๊ทธ๋ ์ด๋๊ฐ ํญ์ ์ต์ ์ ์ ํ์ ์๋๋๋ค.