невозможно преобразовать объект JSON в глобальный массив - PullRequest
4 голосов
/ 09 марта 2019

Я использую экспресс Js.После получения данных из MongoDB Atlas, пытающихся отправить эти данные на мою страницу index.ejs, для этого я преобразовал свой объект в массив и создал его глобально, но мне не удалось получить этот массив или объект JSON.

app.get("/", function (request, response) {

    model.find({},function (err, data1) {
        if (err) {
            response.send({
                statusCode: 500,
                message: 'Data did not selected'
            })
        } else {              
            let wholeArray = Object.keys(data1).map(key => data1[key]);
            app.locals.wholeArray = wholeArray;
        };
    });
    response.render("index");

});

Я пытался получить доступ к этому на моей странице индекса, но он также не удался.

var wholeArray = data1;
app.locals.wholeArray= wholeArray;

вот мой код страницы index.ejs для доступа к объекту JSON.

<% if(wholeArray.length) { %>
    <% wholeArray.forEach(function(entry)  { %>
    <div class="panel panel-default">
        <div class="panel-heading">
            <div class="muted pull-right"><%= entry.today %></div>
            <%= entry.title %>
        </div>
        <div class="panel-body">
            <%= entry.content %>
        </div>
    </div>
    <% }) %>
<% }else { %>
    <span style="font-family:'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif; font-size: 18px; font-weight: 600;">No entries! </span><a href="/newEntry" class="btn btn-primary">Add Entry</a>
<% } %>

1 Ответ

0 голосов
/ 09 марта 2019

Вы вызываете responde.render("index"); вне функции обратного вызова из mongo.find, что означает, что вы не ожидаете получения данных для отображения файла index.ejs.

Вам нужно вызвать response.render("index"); внутри функции обратного вызова из mongo.find, например:

app.get("/", function (request, response) {

    model.find({},function (err, data1) {
        if (err) {
            response.send({
                statusCode: 500,
                message: 'Data did not selected'
            })
        } else {              
            let wholeArray = Object.keys(data1).map(key => data1[key]);
            app.locals.wholeArray = wholeArray;
            response.render("index");
        };
    });
});

Обратите внимание, что вы можете передать локальным временным локальным пользователям res.render в качестве второго аргумента, например: res.render("index", wholeArray);

Кроме того, зачем вам нужно создавать массив? Вы можете отправить объект, возвращенный из mongo напрямую, что, вероятно, будет проще для манипулирования в шаблонизаторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...