Невозможно прочитать свойства null (чтение «коллекции»), эта ошибка возникает при отправке формы. Невозможно сохранить данные в базе данных

в Connection.js


const mongoClient=require('mongodb').MongoClient
const state = {
    db:null
}
module.exports.connect=function (done){
    const url='mongodb://localhost:27017/'
    const dbname='shopping'

   mongoClient.connect(url,(err,data)=>{
     if (err) return done(err)
       state.db=data.db(dbname)   
    })
   done()
}
module.exports.get=()=>state.db

в помощниках по продуктам

var db=require('../config/connection')

module.exports = {

    addProduct:(product,callback)=>{
        console.info(product)
        db.get().collection('product').insertOne(product).then((data)=>{
            console.info(data);
            callback(true)
       })
            
        
        
    }
}

Я не могу найти, в чем ошибка. Я новичок в nodejs.

Я пытался отправить форму, но не получилось. Как я могу это исправить.

db.get().collection('product') — единственное место в показанном коде, где вы пытаетесь получить доступ к свойству или методу collection, что означает, что db.get() вернул не то, что вы ожидали, а только ноль.
CBroe 01.07.2024 13:15

@Шахун, я опубликовал свой ответ. Пожалуйста, проверьте и дайте мне знать, если у вас возникнут вопросы относительно проблемы, с которой вы столкнулись.

Subha 01.07.2024 16:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В файле Connection.js вы вызываете функцию Done() до того, как будет установлено соединение с базой данных. Вам необходимо переместить функцию Done() внутри обратного вызова mongoClient.connect(), чтобы гарантировать, что она вызывается только после успешного установления соединения.

const state = {
    db: null
};

module.exports.connect = function (done) {
    const url = 'mongodb://localhost:27017/';
    const dbname = 'shopping';

    mongoClient.connect(url, (err, client) => {
        if (err) return done(err);

        state.db = client.db(dbname);
        done();
    });
};

module.exports.get = () => state.db;`

При использовании этой базы данных соединение не осуществляется. Также показывает ту же ошибку.

Shahun 01.07.2024 14:19
Ответ принят как подходящий

Вы не можете использовать module.exports для экспорта нескольких частей (т. е. функции, объекта, свойств) из одного и того же модуля. Вам следует использовать только ключевое слово exports для экспорта более одного свойства из одного модуля.

Я ответил на тот же вопрос здесь, на этой платформе, где подробно описал, как создать соединение с database и получить DB-name с помощью mongodb драйвера.

Вы также получите кристально ясное представление о том, как импортировать модуль, чтобы получить экземпляр database в вашем модуле «Другие».

Пожалуйста, проверьте ссылку ниже. Я уверен, что вы получите там ответ.

Приложение Node.js Express не регистрирует состояние подключения MongoDB

Этот работал отлично. Спасибо.

Shahun 02.07.2024 20:54

Добро пожаловать. Рада помочь.

Subha 02.07.2024 20:56

Другие вопросы по теме

Запрос на вставку MySQL выполнен успешно, но не вставляется в таблицу базы данных
Обновление документа Firestore несколько раз с помощью функции триггера события перезаписывает или прекращает обновление после нескольких триггеров
Ошибка при развертывании определенной облачной функции Firebase. Невозможно загрузить предоставленный модуль
Как зашифровать расшифровку с помощью криптомодуля Node.js?
Откройте соединение TCP/IP через сокет с помощью принтера этикеток
Как подключить Sequelize к базе данных Google Cloud SQL, когда я развернул свой внутренний API Node.JS?
Nodejs -> ldapjs... почему возвращаемое значение не определено, а реальное значение client.bind занимает второе место?
Dash.js извлекает файлы .m4s при настройке video.currentTime и приводит к ошибкам. Ошибки при настройке video.currentTime в Dash.js
Ошибка: невозможно найти модуль «следующий» в Docker/Next 14/Node 20/React 18
Ошибка ExcelJs Ошибка: невозможно объединить уже объединенные ячейки