#javascript #node.js #mongodb #mongodb-atlas #oboe.js
#javascript #node.js #mongodb #mongodb-atlas #oboe.js
Вопрос:
Я вижу, что в SO используется не так много тегов oboe, но, пожалуйста, помогите, если можете, это скорее общий вопрос javascript о передаче неперехваченных ошибок для undefined . Спасибо! ~
Я использую Oboe.js для потоковой передачи данных на веб-страницу из коллекции атласа MongoDB. В MongoDB JSON некоторые _id имеют путь item.image.filename
, который является путем к изображению. У некоторых нет item.image .имя файла, поскольку не всем потоковым элементам требуется изображение. Загрузка останавливается, когда появляется неопределенное значение, и я вижу ошибку в консоли.
Я бы ожидал, что если значение отсутствует, то oboe просто перейдет к следующей записи в качестве поведения по умолчанию. Однако _id без пути к изображению генерируют исключение в операторе if, который я использую, чтобы исключить их. Я хочу прояснить этот item.image.имя файла отсутствует, в нем нет значения или установлено значение null, оно просто не существует. Из того немногого, что я знаю о MongoDB, гибкость, позволяющая каждому элементу быть уникальным, является одним из его больших преимуществ.
Я полагаю, что я использовал все способы проверки этого с помощью операторов if, даже используя блок try catch , но при компиляции сам оператор if выдает эту ошибку : oboe-browser.min.js:5 Uncaught Error: Cannot read property 'filename' of undefined at oboe-browser.min.js:5
. Блок if else отобразит html без изображения, если оно не определено, в противном случае оно отобразится.
Одним из способов исправить это было бы добавить a item.image.filename
к каждой записи, но я бы предпочел этого не делать, записей много, это мое последнее средство. Кажется, лучше подождать, чтобы разобраться с этим.
Вот что я пробовал:
if(!item.image.filename)
if(item.image.filename === undefined)
if(item.image.filename == 'undefined')
if(item.image.filename == undefined)
if(item.image.filename === 'undefined')
if(item.image.filename === null)
if(item.image.filename == null)
Я выбрал альтернативный маршрут if(item.image.filename !== undefined)
, как с кавычками, так и без кавычек, а также с null .
Спасибо за помощь!
Комментарии:
1. Как выглядят данные?
2. вы можете попробовать if(item.image amp;amp; item.image . filename) возвращает или if(item.image. имя файла в json) возвращает
3. Не могли бы вы добавить, как выглядит ваш вызов oboe? Я подозреваю, что это упростит отладку
![]()
4. Привет всем, я понял это. Я должен был посмотреть, был ли item.image неопределенным, а не item.image . имя файла. Как только я это изменил, я был в хорошей форме.
Ответ №1:
Вы захотите использовать typeof
:
if(typeof item !== 'object' || typeof item.image !== 'object' || item.image.filename === undefined){
console.log("undefined as far as you're concerned");
}
Что вам нужно знать, так это то, что вы не можете выполнить === undefined
тест для переменной, которая не была объявлена. Но это нормально, чтобы выполнить этот тест для свойства объекта, которое не существует, если объект существует.
Комментарии:
1. Ваша публикация
item.image
и неitem.image.filename
привела к решению. Код будет работать только в том случае, если проверка на неопределенность первого, но не более позднего варианта. Итак, я закончил тем, что использовал в своем коде троичный элемент, подобный этому. Я действительно спускался в крысиную нору. Спасибо. « ${item.image ?<img class="card-img-top thumbnail" src="/images/
item.image. имя файла" alt=""></img>
: `} «
Ответ №2:
попробуйте что-то вроде этого:
if(item.image.filename in this)
или
if(!(item.image.filename in this))
где это объект или массив
Комментарии:
1. Хотел бы я лучше понимать «это» в JS, но к решению меня привел StackSlave. В конце концов мне пришлось использовать троичный, гораздо более чистый.
2. да, его решение лучше, но если вы хотите, я могу объяснить вам «это» и то, что оно использует, просто отметьте меня здесь