Как передать поле mongdb в элемент динамической формы

Работа над веб-приложением. У меня есть маршрут/представление, которое заполняет загрузочные карты на основе данных от вызова API к URL-адресу. Эти данные прекрасно заполняются с помощью цикла forEach, и я использую EJS для установки элементов карты, таких как абзац, в соответствующие данные из вызова API. Однако у меня есть один элемент на картах, который не включен в вызов API, но у меня есть данные в локальном mongodb (с использованием mongoose в этом приложении). Мой уровень навыков очень начальный, поэтому я не совсем уверен, как сделать следующую часть. Я тщательно искал ответ. я хочу получить

элемент на карточке, чтобы показать соответствующее поле из базы данных с использованием идентификатора (который является динамическим на основе вызова API), чтобы определить правильные данные для использования из документа. Это приложение покажет информацию о платных дорогах в каждом штате. Вызов API возвращает все платные дороги для штата на основе выбора пользователем штата. Карточки начальной загрузки заполняют некоторую базовую информацию из вызова API о платных дорогах. Но у меня есть описание платных в БД, которое не включено. Загрузочная карта будет динамически получать толлид, который также есть у db. Мне просто нужно выяснить, как получить locdesc из базы данных на основе соответствующего tollid на карте. Я надеюсь, что в этом есть смысл. Код ниже....

Я могу выполнить find() и получить данные из базы данных на моем маршруте, поэтому я чувствую, что почти у цели.

-------------------МАРШРУТ------------------------------ -----------------------

app.get("/results", isLoggedIn, function(req, res){
var state = req.query.state

    Locationdesc.find({ state: state }, function(err, locdesc){
        if (err){
            console.info(err)
        } else {


request("https://apiurlgoeshere" + state + "apiurlgoeshere", function(error, response, body){
            if (!error && response.statusCode == 200){
            var parsedData = JSON.parse(body)
            res.render("results", {data:parsedData, locdesc:locdesc})

        }
    })
    }
    })

})

------------------КОНЕЦ МАРШРУТА---------------------------------------------------------

----------------ПОСМОТРЕТЬ------------------------------

<% include ./partials/header %>

 <div class = "container">
     <header class = "jumbotron mb-5">
         <div class = "container text-center">
             <h1>Select a Toll to View Additional Information and Do Something with Notifications and Alerts</h1>
             <p>
                <a class = "btn btn-primary btn-large" href = "/search">Back To Search</a>
             </p>
     </div>
 </header>

    <div class = "album py-">
        <div class = "container">

          <div class = "row">
               <% data["features"].forEach(function(toll){ %>

            <div class = "col-md-4 col-lg-3 col-sm-6 card-group">
              <div class = "card shadow mb-4">
                <div class = "card-body d-flex flex-column">

 <p class = "card-text">Toll ID - <%= toll["attributes"]["tollid"] %></p>
 <p class = "card-text">Cost- <%= toll["attributes"]["cost"] %></p>
 <p class = "card-text">Location - <%= toll["attributes"]["location"] %></p>
 <p class = "card-text">Location Description - ??????????????????????? </p>
 <p class = "card-text hide">State - <%= gauge["attributes"]["state"] %></p>

                         </div>
                </div>
              </div>
            <% }) %>
        </div>
    </div>
    </div>

--------------------------------КОНЕЦ ПРОСМОТРА---------------- ------------------

--------------------------------СХЕМА БД---------------- -----

var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var locSchema = new mongoose.Schema ({
    locdesc: String,
    tollid: String,
    state: String
})

var Locationdesc = mongoose.model("Locationdesc", locSchema)

module.exports = mongoose.model('Locationdesc', locSchema);

Где хранится описание вашего местоположения?

Moad Ennagi 07.04.2019 19:56

описание местоположения хранится в mongodb. приведенная выше схема является схемой для коллекции описания местоположения (Locationdesc). Он включает в себя состояние, описание местоположения и идентификатор платы. Платный идентификатор — это то, что будет иметь карта, которая скажет мне, какое описание местоположения вернуть. В представлении будет несколько карт, поэтому мне нужно будет использовать tollid из каждой карты, чтобы вернуть locdesc для этой конкретной карты.

space_laser 07.04.2019 20:43
Поведение ключевого слова "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
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть доступ к locdesc, что не так :

<div>
  <% data["features"].forEach(function(toll){ %>
    <p class = "card-text">Toll ID - <%= toll["attributes"]["tollid"] %></p>
    <p class = "card-text">Cost- <%= toll["attributes"]["cost"] %></p>
    <p class = "card-text">Location - <%= toll["attributes"]["location"] %></p>
    <% if (locdesc.filter(location => location.tollid == toll["attributes"]["tollid"])[0]['locdesc']) { %>
      <p class = "card-text">Location Description <%= locdesc.filter(location => location.tollid == toll.tollid)[0]['locdesc'] %>
    <% } %>
    <p class = "card-text hide">State  <%= toll.state %></p>
  <% }) %>
</div>

Использование filter поможет.

Итак, я пробовал это раньше, но я не думал, что это сработает, потому что... В маршруте и в find() я возвращаю атрибуты для всех пунктов взимания платы в определенном состоянии. Таким образом, locdesc.locdesc недостаточно конкретен. Каждое место взимания платы имеет свою собственную карту, и карты заполняются для всех мест взимания платы в штате. У locdesc есть поле tollid, которое будет одинаковым в карте и в базе данных. Я надеюсь, что в этом есть смысл. Думаю, мне нужен (псевдокод): locdesc.locdesc, где tollid на карте равен tollid в db...

space_laser 07.04.2019 22:44

Вы можете использовать filter, а затем выбрать первый элемент в возвращаемом массиве.

Moad Ennagi 07.04.2019 22:52

Мое незнание здесь смущает. Я не уверен, как это сделать, но изучу его и вернусь... скоро, я надеюсь!

space_laser 07.04.2019 23:23

Это определенно правильный путь. Сделал большой прогресс. Я не мог заставить его работать, используя нотацию со стрелкой, поэтому я возился с ней, используя нотацию function(). Итак, я получаю полный документ, возвращенный из БД. Всего 3 поля (state, tollid и locdesc). Код: <%= toll["attributes"]["tollid"] %>, который я использую для других элементов, относится к URL-адресу API JSON, а не к базе данных. Вот мой код на данный момент: <p class = "card-text">Описание местоположения - <%= locdesc.filter(function(locdesc) {return locdesc.tollid == toll["attributes"]["tolllid"]}) %> </p>....

space_laser 08.04.2019 01:08

Документ направляется на правильную карту, поэтому он соответствует информации о платных дорогах, полученной из URL-адреса API.

space_laser 08.04.2019 01:12

Не забудьте проверить, определен ли locdesc, как показано в ответе.

Moad Ennagi 08.04.2019 11:26

Итак, я думаю, проблема в том, что я, возможно, использую вложенные массивы... В каждом массиве есть {state, locdesc, tollid}. Я могу вернуть весь этот массив в соответствующей карте, но все, что мне нужно/хочу, это locdesc, когда tollid соответствует tollid из данных API. Возможно, мне придется опубликовать новый вопрос, но я собираюсь отметить этот вопрос как ответ, так как ваш ответ привел меня туда, где, по крайней мере, я могу что-то вернуть. Большое спасибо и дальше...

space_laser 09.04.2019 04:04

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