找不到对象,使用解析 nodejs

Object not found, using parse nodejs

我是 parse 的新手,我正在尝试从我的数据库中获取对象并在我的网页中使用 for 循环通过 ejs 显示它们。我正在使用 back4app 作为我的数据库。

这是我正在做的事情:

const Car = Parse.Object.extend('Vehicle');
const query = new Parse.Query(Car);

app.get('/', function(req, res){  

   const VehicleInfo = [
        {
            VehicleName: query.get('Name'),
            Description: query.get('Description'),
            Price: query.get('Price'),
            Rating: query.get('Rating'),
            Route: query.get('Route'),
            PassengerAmount: query.get('PassengerAmount')
        }                         
    ]

    try{
    res.render('index', {
        title: 'mainPage',
        VehicleData: VehicleInfo

    });
    }catch(error){
        throw error.message;
    }

});

我查询了这个,我的所有 5 辆车都显示在 console.log 中,但是当我尝试在我的 .ejs 文件中做同样的事情时,它出现了,只有一个 div 显示

enter image description here

这是我使用 for 循环的方式

    <% for (var CarInfo of VehicleData) { %>
            <div class="row">

                <div class="col-lg-4 col-md-6">

                    <!-- Car Item-->
                    <div class="rn-car-item">
                        <div class="rn-car-item-review">
                            <div class="fas fa-star"></div> <%= CarInfo.Rating %>

                        </div>
                        <div class="rn-car-item-thumb">
                            <a href="/car-single">
                                <img class="img-fluid" src="/images/car-1.jpg" alt="Black Sedan" srcset="/images/car-1.jpg 1x, /images/car-1@2x.jpg 2x"/>
                            </a>
                        </div>
                        <div class="rn-car-item-info">
                            <h3>
                                <a href="/car-single"> <%= CarInfo.VehicleName %></a>

                            </h3>                                                               

                            <p>Descripcion: <%= CarInfo.Description %></p>
                            <div class="rn-car-list-n-price">
                                <ul>
                                    <li>Ruta: <%= CarInfo.Route %></li>
                                    <li>Cantidad de Pasajeros: <%= CarInfo.PassengerAmount %></li>
                                </ul>
                                <div class="rn-car-price-wrap">
                                    <a class="rn-car-price" href="/car-single">
                                        <span class="rn-car-price-from">Desde</span>
                                        <span class="rn-car-price-format">
                                            <span class="rn-car-price-amount">$<%= CarInfo.Price %></span>
                                            <span class="rn-car-price-per">/day</span>
                                        </span>
                                    </a>
                                </div>
                            </div>
                        </div>
                    </div>
                    <!-- End Car Item-->                     
                </div>

            </div>
            <% } %>

我确定您的代码不会像这样工作,也不在控制台中。您需要 运行 findfirst 才能获取对象。

另一个问题是您的 Promise 尚未解析,并且在您将其传递给 .ejs 文件时不包含结果。它在控制台中有效,因为一旦 Promise 得到解决,控制台中的结果就会更新。

你需要做的

const VehicleInfo = [];
const query = new Parse.Query(Car);
query.find().then(result => {
    result.forEach(vehicle => {
        VehicleInfo.push({
            VehicleName: result.get('Name'),
            Description: result.get('Description'),
            Price: result.get('Price'),
            Rating: result.get('Rating'),
            Route: result.get('Route'),
            PassengerAmount: query.get('PassengerAmount')
        });
    });
}).catch(error => {
    console.error('error fetching objects', error);
});

或者您可以 await 更清晰代码的结果:

app.get('/', async function(req, res) {
    const VehicleInfo = [];
    const query = new Parse.Query(Car);
    try {
        const result = await query.find();
        result.forEach(vehicle => {
            VehicleInfo.push({
                VehicleName: result.get('Name'),
                Description: result.get('Description'),
                Price: result.get('Price'),
                Rating: result.get('Rating'),
                Route: result.get('Route'),
                PassengerAmount: query.get('PassengerAmount')
            });
        });
    } catch (error) {
        console.error('error fetching objects', error);
    }
});

Here's more about Promises in JavaScript