Я пришел из питона, когда подключался к базам данных и выполнял sql без ORM.Скажем, с библиотекой python cx_Oracle
, вот так:
>>> conn = cx_Oracle.connect(connectionString)
>>> curs = conn.cursor()
>>> _ = curs.execute(...)
Точнее говоря, все мои вызовы направляются в базу данных через возвращенный объект соединения conn
, а не саму библиотеку cx_Oracle
.
В приложении express
, использующем mongodb с node.js
и mongoose
, мы можем сделать что-то вроде:
require('./models/user'); // Defines new Schema in mongoose named 'users'
require('./services/passport'); // receives data from OAuth flow
// and writes new authenticated users to MongoDB database
mongoose.connect(keys.mongoURI, {useNewUrlParser: true});
const app = express();
require('./routes/authRoutes')(app); // handle OAuth routes and pass to passport authentication
// server runs and listens to routes etc
Кажется, что импортированная библиотека mongoose
сама по себеполучить новые свойства от:
mongoose.connect(keys.mongoURI, {useNewUrlParser: true});
Поскольку последующие вызовы, подобные приведенным ниже в ./services/passport.js
для создания новых пользователей, не имеют явной ссылки на наше соединение.
const User = mongoose.model('users');
// within an OAuth callback
new User({ id: response.data.id })
.save()
.then(...)
У меня естьпосмотрел на источник Mongoose.prototype.connect
, чтобы понять это, но смущен оператором return.После того, как обещание выполнено, оно возвращает функцию стрелки с _mongoose
, нашим экземпляром самого прототипа Mongoose
с новым подключением, но мы ничего не возвращаем в нашем приложении.
Mongoose.prototype.connect = function() {
const _mongoose = this instanceof Mongoose ? this : mongoose;
const conn = _mongoose.connection;
return conn.openUri(arguments[0], arguments[1], arguments[2]).then(() => _mongoose);
};
МожетКто-нибудь, пожалуйста, объясните, что происходит с нашей импортированной библиотекой mongoose
, когда мы вызываем mongoose.connect(...)
?Или, может быть, пришлите некоторые ресурсы, чтобы я мог увидеть простой пример этого?Спасибо.