(node:71307) [DEP0079] DeprecationWarning

10

尝试更新MongoDB文档时,收到以下废弃警告:

(node:71307) [DEP0079] DeprecationWarning: Custom inspection function on Objects via .inspect() is deprecated

Node版本为v10.5.0, 数据库版本为v3.6.5, Mongoose版本为mongoose@4.1.12

Campground.findById(campgroundId, function(err, campground){
    if(err){
        console.log(err);
    } else {
        console.log(campground.celebrity);
        Celebrity.create(celebrityData, function(err, celebrity){
            if(err){
                console.log(err);
            } else {
                //save comment
                celebrity.save();
                campground.celebrity.push(celebrity);
                campground.save();
                console.log(celebrity);
                //req.flash('success', 'Created a comment!');
            }
        });
    }
});

1
请提供您的Node和Mongoose版本。 - Himanshu sharma
Mongoose 版本是多少? - Himanshu sharma
Mongoose版本mongoose@4.1.12 - Kiran Ghatage
这个问题现在将会出现在mongoose上,但他们会对此进行修复。现在使用它是安全的,不用担心。 - Himanshu sharma
9个回答

14

不要担心这个错误,这是mongoose警告。实际上,Mongoose使用inspect()进行调试输出。他们将在可能在Node 12.x之前更新它。现在使用它是安全的。

不用担心。

查看此信息。 https://nodejs.org/api/deprecations.html#deprecations_dep0079_custom_inspection_function_on_objects_via_inspect

DEP0079: 对象通过.inspect()自定义检查函数 # 类型:运行时

使用名为inspect的属性来指定util.inspect()的自定义检查函数已被弃用,请改用util.inspect.custom。为了向后兼容Node.js版本6.4.0之前的版本,两者都可以指定。

如果您想了解更多细节,请查看此处。正在进行中。警告将在Node 10中出现

https://github.com/Automattic/mongoose/issues/6420


我的mongoose版本是5.5.3,但我仍然遇到错误。即使添加了这行代码。 - Nitin

5
为了避免收到废弃消息,您可以根据Github mongoose issue升级到mongoose版本5.2.10或更高版本,并在代码的适当位置设置以下内容:
mongoose.set('useCreateIndex', true)

我的mongoose版本是5.5.3,但我仍然遇到错误。即使添加了这行代码。 - Nitin

3

升级到5.2.10并设置

  mongoose.set('useCreateIndex', true);

3

2

您应该在连接方法中添加选项useCreateIndex

mongoose.connect(keys.mongoURI, {
    useNewUrlParser: true,
    useCreateIndex: true,
})

2
为了解决这个问题,您需要使用useNewUrlParser和useCreateIndex。请参见下面的代码。
mongoose.connect(
 config.databaseUrl,
 { 
    useNewUrlParser: true, 
    useCreateIndex: true 
 }
)

或者

mongoose.set("useCreateIndex", true);    
mongoose.connect(
    config.databaseUrl,
    { 
        useNewUrlParser: true
    }
  );

1
我想补充一下,这可能与其他依赖项有关。
例如,我更新或设置的NodeJS、MongoDB或Mongoose都不是问题所在——但是,我的问题是connect-mongodb-session已经更新并开始抛出相同的错误。在这种情况下,解决方案很简单,只需将connect-mongodb-session的版本从2.3.0回滚到2.2.0即可。

enter image description here


1
完全随机,但至少不是抄袭答案:当我意外地使用 Model.find() 而不是 Model.findOne() 时,我遇到了这个弃用警告(和意外行为)。因此,我的错误代码看起来像这样。
User.find(query)
.then(user => {
  console.log(user.emailSettings.confirmToken)
})

...如果使用普通的对象/数组,则会出现TypeError: Cannot read property 'confirmToken' of undefined错误,但是使用mongo文档数组时,它似乎会进行检查并现在给出此弃用警告。


0
mongoose.connect(process.env.CONNECTION_MONGO, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false,
})
.then(() => {
console.log("Database connected...");
})
.catch((err) => console.error(err));

虽然这段代码可能提供了问题的解决方案,但最好加上为什么/如何运作的上下文说明。这可以帮助未来的用户学习并最终将该知识应用到自己的代码中。当代码被解释时,您还有可能得到其他用户的积极反馈/赞同。 - Amit Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接