这是我用来连接数据库的代码:
private connectDatabase(databaseUri: string): Promise<Mongoose.Connection> {
return Mongoose.connect(databaseUri).then(() => {
debug('Connected to MongoDB at %O', databaseUri);
return Mongoose.connection;
});
}
今天我将Mongoose更新到版本4.11.0,并在运行测试时收到此警告:
(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`
我找不到任何关于如何“设置useMongoClient”的信息。
你们知道怎么做?
答案 0 :(得分:74)
这是您使用 useMongoClient 的方式:
mongoose.connect('mongodb://localhost/advisorDemoTestDB', { useMongoClient: true })
答案 1 :(得分:29)
将 {useMongoClient:true} 添加为connect或createConnection方法的另一个参数,它取决于您使用的mongoose版本。
// Using `mongoose.connect`...
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
// Or `createConnection`
var promise = mongoose.createConnection('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
答案 2 :(得分:12)
mongoose.connection.openUri('mongodb://127.0.0.1/camp_v12')
有人试过吗?当我使用它时,我的弃用警告消失了,它来自文档
答案 3 :(得分:9)
最简单的解决方法是打开终端,将目录更改为根项目(package.json
所在的文件夹)
执行命令
npm remove mongoose
然后:
npm install mongoose@4.10.8 --save
问题解决了。
升级并不总是最好的选择。
答案 4 :(得分:6)
没有打字稿,您几乎可以忽略此问题并使用Mongoose.connect(databaseUri, { useMongoClient: true })
。
如果你真的想避免让警告避免使用版本4.11.0。
我更新到版本4.11.1,因为@ types / mongoose @ 4.7.18尚未更新,他们没有提到useMongoClient
中的字段ConnectionOptions
,这是我导入的方式模块:
const Mongoose = require('mongoose');
然后使用此功能:
private connectDatabase(databaseUri: string): Promise<any> {
return Mongoose.connect(databaseUri, { useMongoClient: true })
.then(() => {
console.log('Connected to MongoDB at ', databaseUri);
return Mongoose.connection;
})
.catch(err => debug(`Database connection error: ${err.message}`));
}
答案 5 :(得分:6)
正如许多答案所说,在{ useMongoClient: true }
或connect
方法的options参数中添加createConnection
将解决问题。
例如
// With mongoose.connect method
mongoose.connect('mongodb://localhost/app', { useMongoClient: true });
// With createConnection method
mongoose.createConnection('mongodb://localhost/app', { useMongoClient: true });
但是,首先是什么是MongoClinet?
从MongoDB Node.js驱动程序版本1.2开始,引入了一个新的连接类MongoClient,它在所有官方驱动程序中具有相同的名称。
新连接类 MongoClient确认对MongoDB的所有写入,与已关闭确认的现有连接类Db形成对比。
所以{ useMongoClient: true }
告诉moongoose使用新的连接类而不是旧连接类
了解更多信息click here
答案 6 :(得分:4)
使用Mongoose 4.11.x连接到MongoDB(使用mLab单实例和MongoDB Atlas副本集进行测试):
const mongoose = require('mongoose'); mongoose.Promise = global.Promise; const options = { promiseLibrary: global.Promise, useMongoClient: true, }; function connect() { mongoose.connect(URI, options) .then(function() { const admin = new mongoose.mongo.Admin(mongoose.connection.db); admin.buildInfo(function(err, info) { if (err) { console.err(`Error getting MongoDB info: ${err}`); } else { console.log(`Connection to MongoDB (version ${info.version}) opened successfully!`); } }); }) .catch((err) => console.error(`Error connecting to MongoDB: ${err}`)); } module.exports = connect;
创建模型:
const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({...}); module.exports = mongoose.model('User', userSchema);
答案 7 :(得分:0)
根据mongoose
documentation,这就是useMongoClient
的设置方式。
function connectDatabase(databaseUri){
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
});
return promise;
}
答案 8 :(得分:0)
最简单的解决方法:
通过终端在项目根文件夹中运行此命令:
npm remove mongoose
npm install mongoose@4.10.8 --save
问题解决了。
升级并不总是最好的选择。
答案 9 :(得分:0)
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/starbucks', {
useMongoClient: true
});
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('openUri', function() {
// we're connected!
});
答案 10 :(得分:0)
错误:强>
(节点:1652)弃用警告:<div class="row" ng-repeat="post in this.posts">
<img src="{{post.img}}" alt="First sample image">
<h6 class="pb-1"><i class="{{post.icon}}"></i> {{post.category}}</h6>
<h4 class="mb-4"><strong>{{post.title}}</strong></h4>
<p>{{post.content}}</p>
<p>by <a>{{post.title}}</strong></a>,{{post.date}}</p>
</div>
在mongoose&gt; = 4.11.0中已弃用,请改用open()
,或者如果使用openUri()
则设置useMongoClient
选项或connect()
。
解决方案:在连接属性中设置 useMongoClient:true
createConnection()
参见http://mongoosejs.com/docs/connections.html#use-mongo-client 现在正在听取请求
答案 11 :(得分:-1)
升级猫鼬,首先您需要使用以下代码将其卸载:
npm uninstall mongoose
然后使用以下代码再次安装:
npm install mongoose --save
答案 12 :(得分:-2)
使用Typescript对我有用:
var dbOpt : any = {
useMongoClient: true
}
mongoose.connect(dbURI, dbOpt);