Mon goose TypeError: Невозможно прочитать свойство 'insertOne' из null - PullRequest
0 голосов
/ 19 февраля 2020

Я пытался выяснить, что я облажался все утро.

Первая проблема: когда я вызываю myModel.create (), я получаю это в консоли:

TypeError: Cannot read property 'insertOne' of null

Схема и модель:

const callSchema = new mongoose.Schema({
        date: Date,
        times: {
            dispatch: String,
            clear: String
        },
        incident: Number,
        calltype: String,
        address: {
            streetAddress: String,
            city: String,
            state: String,
            zip: String
        },
        recall: [ 
            {type: mongoose.Schema.Types.ObjectId,
            ref: "User"}],
    });
const callData = mongoose.model("callData", callSchema);

Теперь для данных и функции:

//dummy data:

var call = {
        date: '2020-02-19T08:35:04.803Z', 
        times: {
            dispatch: '1800', 
            clear: '1900'},
        incident: 2000599,
        calltype: 'medical', 
        address: { 
            streetAddress: '1200 Southgate', 
            city: 'Pendleton',
            state: 'OR',
            zip: '97801'},
        recall: ["5e4b5ac03e6a9e3ed521ab80"]
        };

function newCall(runData, times, personell){
    console.log(runData);

    callData.create(runData);
}

newCall(call);

Что я сделал:

Я закомментировал все, кроме даты в схема и данные, чтобы попытаться сузить проблему. Это не изменило никакого поведения, оно продолжало выдавать ту же ошибку. Я посмотрел здесь, и у других были подобные проблемы, но я исправил то, что они предложили (изменил тип: на calltype :), и я не могу найти то, что я испортил в схеме.

Буду признателен за любую помощь.

-Адам

1 Ответ

0 голосов
/ 23 февраля 2020

Проблема была в моей связи с БД. У меня не было настройки, чтобы ждать правильно. Так что это была асинхронная проблема, и теперь она решается путем правильной настройки функции подключения для ожидания и возврата после завершения.

В качестве примера:

const mongoose = require('mongoose'),
      logger   = require('../logging');



async function connect(){

//I had to place mongoose.connect(...)... in side of the const connected.
  const connected =  mongoose.connect("mongodb://localhost:27017/fdData", { 
    useNewUrlParser: true,
    useUnifiedTopology: true,
    bufferCommands: false,
    useFindAndModify: false,
});

  let con = mongoose.connection;
  con.on('error', logger.error.bind(logger, 'connection error:'));
  con.once('open', function() {
    logger.info('DB Connected');
  });

  mongoose.connection.on('disconnected', function(){
    console.log("Mongoose default connection is disconnected");
});

process.on('SIGINT', function(){
  mongoose.connection.close(function(){
      console.log("Mongoose default connection is disconnected due to application termination");
      process.exit(0)
  });
});

//I had to ADD this return as I did not have it.
return connected;

}

async function disconnect(){
    await mongoose.disconnect()
}

module.exports= {connect, disconnect}

Выполнение этих действий заставляет мой код ожидать выполнения остальной части, пока БД не будет официально подключено.

-Adam

...