Модуль Promise: UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'collection' из неопределенного - PullRequest
0 голосов
/ 09 марта 2019

Я просто искал свои проблемы в обсуждениях stackoverflow, но ничто не похоже на мой выданный.Итак, в этом случае я просто хочу обновить свою коллекцию, а затем использовать модуль Promise, вместо этого использовать функции обратного вызова / анонимные функции, как это обычно делалось мной.но ошибка появляется, когда я выполняю приложение js в cmd.

Вот мой простой код:

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:

(узел: 8600) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'collection'неопределено в C: \ Users \ DELL \ guru99 \ 5_Promise \ app_promise.js: 7: 9 at at process._tickCallback (internal / process / next_tick.js: 189: 7) (узел: 8600) UnhandledPromiseRejectionWarning: необработанное отклонение обещания,Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch ().(идентификатор отклонения: 1) (узел: 8600) [DEP0018] Предупреждение об устаревании: отклонения необработанного обещания устарели.В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.

так, есть ли неправильный код в моем коде выше?

спасибо за помощь ... извините за мой плохой английский

Ответы [ 3 ]

0 голосов
/ 09 марта 2019

Ваш подход верен, но вы упустили одну вещь.

Когда вы не предоставляете параметры обратного вызова, mongo ORM возвращает обещание.Вот исправленный код:

MongoClient.connect(url)
    .then(function(db) { // <- db is first argument
        db.collection('Employee').updateOne({
            "EmployeeName": "Jeffrey"
        }, {
            $set: {
                "EmployeeName": "Jeffrey Scurgs"
            }
        });
    })
    .catch(function (err) {})
0 голосов
/ 09 марта 2019

это лучший ответ на данный момент ... опубликовано 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) {})

после этого я хочу исследовать Обещание затем с вложенным потом ... вот код ...

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);
});
0 голосов
/ 09 марта 2019

Переменная 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"
    	        }
    	    });
    	}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...