模块承诺:UnhandledPromiseRejectionWarning:TypeError:无法读取undefined的属性'collection'
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块承诺:UnhandledPromiseRejectionWarning:TypeError:无法读取undefined的属性'collection'相关的知识,希望对你有一定的参考价值。
我刚刚在stackoverflow的讨论中搜索了我的问题,但与我发布的内容类似。因此,在这种情况下,我只想更新我的集合,然后使用'Promise'模块,而不是像我通常那样使用回调/匿名函数。但是当我在cmd中执行js的应用程序时出现错误。
这是我的简单代码:
var Promise = require('promise'); // use the 'promise' module
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url)
.then(function(err, db) {
db.collection('Employee').updateOne({
"EmployeeName": "Jeffrey"
}, {
$set: {
"EmployeeName": "Jeffrey Scurgs"
}
});
});
当我在cmd中执行代码时出现错误:
(node:8600)UnhandledPromiseRejectionWarning:TypeError:无法在C: Users DELL guru99 5_Promise app_promise.js:7:9处读取未定义的属性'collection'at process._tickCallback(internal / process / next_tick.js: 189:7)(节点:8600)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误源于在没有catch块的情况下抛出异步函数,或者拒绝未使用.catch()处理的promise。 (拒绝ID:1)(节点:8600)[DEP0018]弃用警告:不推荐使用未处理的拒绝承诺。将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程。
那么,上面的代码中是否有任何错误的代码?
谢谢你的帮助......抱歉我的英语不好
如果连接到数据库时出错,则db
变量只能是未定义的。
您需要检查并修复显示的任何错误。您也可以分享错误
var Promise = require('promise'); // use the 'promise' module
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url)
.then(function(err, db) {
if (err) {
return throw err; // Check the error
}
db.collection('Employee').updateOne({
"EmployeeName": "Jeffrey"
}, {
$set: {
"EmployeeName": "Jeffrey Scurgs"
}
});
});
你的方法是正确的,但你错过了一件事。
当你不提供回调参数时,mongo ORM会返回一个promise。这是更正后的代码:
MongoClient.connect(url)
.then(function(db) { // <- db is first argument
db.collection('Employee').updateOne({
"EmployeeName": "Jeffrey"
}, {
$set: {
"EmployeeName": "Jeffrey Scurgs"
}
});
})
.catch(function (err) {})
到目前为止,这是最好的答案...由uday singh发布
MongoClient.connect(url)
.then(function(db) { // <- db is first argument
db.collection('Employee').updateOne({
"EmployeeName": "Jeffrey"
}, {
$set: {
"EmployeeName": "Jeffrey Scurgs"
}
});
})
.catch(function (err) {})
之后,我想用嵌套然后探索Promise ...这里的代码......
var Promise = require('promise');
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url)
.then(function(db) {
return db.collection('Employee').insertOne({
Employeeid: 4,
EmployeeName: "Ronan"
})
.then(function() {
return db.collection('Employee').insertOne({
Employeeid: 5,
EmployeeName: "Teabouf"
})
})
}).catch(function(err) {
console.error(err);
});
以上是关于模块承诺:UnhandledPromiseRejectionWarning:TypeError:无法读取undefined的属性'collection'的主要内容,如果未能解决你的问题,请参考以下文章
一个承诺的 mysql 模块将如何与 NodeJS 一起工作?
未捕获(承诺)类型错误:无法获取动态导入的模块:http://localhost:81/controllers/chatController
模块承诺:UnhandledPromiseRejectionWarning:TypeError:无法读取undefined的属性'collection'