如何将Mongdb字段传递给动态表单元素

时间:2019-04-07 17:31:42

标签: javascript mongodb mongoose

使用网络应用程序。我有一个路由/视图,它根据从API调用到URL的数据填充引导卡。使用forEach循环可以很好地填充该数据,而我使用EJS可以将卡片等元素(如段落)设置为来自API调用的适当数据。但是,我的卡上有一个元素不包含在API调用中,但是我的数据在本地mongodb中(在此应用程序中使用mongoose)。我的技能水平是初学者,所以我不太确定如何进行下一部分。我已彻底寻找答案。我想获得卡上的

元素,以使用ID(根据API调用是动态的)从数据库中显示相应字段,以从文档中识别要使用的正确数据。该应用程序将显示每个州的收费公路信息。 API调用根据用户选择的州来返回该州的所有收费公路。引导卡会从API调用中填充一些有关收费公路的基本信息。但是我有一个不包含在数据库中的收费说明。引导卡将动态获取数据库也具有的通行费。我只需要弄清楚如何根据卡上的相应收费从数据库中获取locdesc。我希望这是有道理的。下面的代码。...

我能够执行find()并从我的路线中的数据库中获取数据,所以我感觉自己快到了。

------------------- ROUTE --------------------------- --------------------------

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

    Locationdesc.find({ state: state }, function(err, locdesc){
        if(err){
            console.log(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})

        }
    })
    }
    })

})

----------------- END ROUTE ----------------------------

---------------- VIEW ------------------------------

<% 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>

-------------------------------- END VIEW ----------------- ---------------------

-------------------------------- DB SCHEMA ------------- --------

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);

1 个答案:

答案 0 :(得分:0)

您有权访问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可以解决问题。