отправить данные с сервера на клиент nodejs - PullRequest
3 голосов
/ 02 мая 2020

У меня есть этот код, который позволяет мне получать все сообщения, сделанные пользователем в моей БД. Проблема в том, что я пытался отправить эти данные клиенту. Но мне это не удалось, и я не знаю, чего мне не хватает,

Код, извлекающий информацию о пользователе из mongoDB, приведен ниже. Код работает отлично, без проблем,

User.find({}).lean(true).exec((err, users) => {
      let userMap = [];

            userMap.push({ user: users[i], posts: users[i].posts[j] });
       //all the data are stored to userMAP :[{user : xxxxx ,posts : {the posts are here}}]
          }
        }

      }
      console.log(userMap);

      User.findOne({ userName: req.user.userName }, (error, req_user) => {

        console.log(req.user.lastLogin)
        let lastSeen = ta.ago(req.user.lastLogin);

        //console.log(posts)
        res.render('home', { // this part for rendering the homePage and send data
          user: req_user,
          people: users,
          userMap: userMap.reverse()
        });
      });

То, что я пробовал в своем коде на стороне клиента, это:

  <div class="container">

        <% for(var x=0;x<user.posts.length;x++) { %>
    <div class="jumbotron">
        <div>by
            <b>{{ user.posts[x].author }}</b>
            on
            <small>{{ user.posts[x].createdAt }}</small>
        </div>

        <div>
            <p>{{ user.posts[x].caption }}</p>
        </div>

        <div class="row">
            <button onclick="actOnPost(event);"
                    data-post-id="{{ this.id }}">Like
            </button>
            <span id="likes-count-{{ this.id }}">{{ this.likes_count }}</span>
        </div>
    </div>
    <% } %>

Для части ошибки Я ничего не получаю,

это изображение моих сохраненных данных в базе данных

enter image description here

и это изображение домашней страницы

enter image description here

Сценарий для моего кода:

1 - я использую E JS механизм просмотра и когда появляется логин пользователя в home.ejs, а на стороне сервера я использую приведенный выше код для подготовки данных, которые мне нужны для отображения

2 - все работает отлично, за исключением отображения данных на клиенте сторона home.ejs

3- для вызова этой страницы с моего сервера Я использовал это утверждение со смесью приведенного выше кода

router.get('/home', (req, res) => {
  if (req.user.id) {
    console.log(req.user.id)
    User.find({}).lean(true).exec((err, users) => {
      let userMap = [];

Любая помощь или лучшее решение для отображения данных на сторона клиента,

С наилучшими пожеланиями,

Ответы [ 3 ]

2 голосов
/ 02 мая 2020

Это не синтаксис для отображения данных в e js, попробуйте это. См. Эти документы

<% = Выводит значение в шаблон (HTML сбежал) </p>

    <% for(var x=0;x<user.posts.length;x++) { %>
<div class="jumbotron">
    <div>by
        <b><%= user.posts[x].author %></b>
        on
        <small><%= user.posts[x].createdAt %></small>
    </div>

    <div>
        <p><%= user.posts[x].caption %></p>
    </div>

    <div class="row">
        <button onclick="actOnPost(event);"
                data-post-id="<%= this.id %>">Like
        </button>
        <span id="likes-count-<%= this.id %>"><%= this.likes_count %></span>
    </div>
</div>
<% } %>
0 голосов
/ 02 мая 2020

Привет, @odegeek. То, что мы пока показываем, это то, как ты получаешь данные из базы данных и идея, как показать их в твоем представлении. Но нам здесь не хватает нескольких частей информации. Например:

  • Какую внешнюю среду вы используете, если таковая имеется?
  • Где вы вызываете конечную точку бэкэнда?
  • Какой механизм просмотра вы используете?

Типичным потоком для этого сценария будет:

  • Ваш веб-интерфейс отправляет запрос в бэкэнд, запрашивая данные
  • Как только ответ попадает в браузер вы делаете какой-то анализ / отображение, чтобы адаптировать его к вашим потребностям
  • Затем вы передаете его на просмотр для рендеринга. Теперь в зависимости от того, какой интерфейс / движок представления вы используете. Код для рендеринга данных будет отличаться

Я надеюсь, что это может дать вам представление о том, что вы должны предоставить / сделать .. спасибо

0 голосов
/ 02 мая 2020

Исходный код шаблона отображается в браузере. Это означает, что механизм просмотра не анализирует его.

Механизм представления по умолчанию - Jade, но вы не используете Jade.

Возможно, вы забыли настроить механизм просмотра :

app.set('view engine', 'whatever template engine you are trying to use')
...