EJS просто выводит первого найденного пользователя в некоторых случаях - PullRequest
2 голосов
/ 05 июня 2019

Im Использование mongoDB и ejs для отображения всех моих пользователей в таблице.В таблице также есть несколько кнопок действий для удаления пользователя и изменения роли пользователя.Кнопки открывают всплывающее окно, чтобы изменить роль или подтвердить удаление.Но EJS не передает информацию о пользователях во всплывающее окно.Он отлично работает в таблице, но не во всплывающем окне.

Моя таблица пользователей EJS с изменением роли Всплывающее окно:

<tbody>
                  <%users.forEach(function(users){%>
                  <tr>
                    <td><%=users.name%></td>
                    <td><%=users.username%></td>
                    <td><%=users.createdAt%></td>
                    <td><span class="badge label-table badge-<%=users.role%>"><%=users.role%></span></td>
                    <td><span class="badge label-table badge-<%=users.verifyEmailToken%>"><%=users.verifyEmailToken%></span></td>
                    <td>
                      <button type="submit" class="btn btn-xs btn-success" data-toggle="modal" data-target="#con-close-modal" name="changeRoleButton"><i class="remixicon-user-settings-line"></i></button>
                    </td>
                  </tr>

                  <div id="con-close-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;">
                    <div class="modal-dialog">
                      <div class="modal-content">
                        <div class="modal-header">
                          <h4 class="modal-title">Change <%=users.name%> Role</h4>
                          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                        </div>
                        <form class="" action="/changeuserrole" method="post">
                          <div class="modal-body p-4">
                            <div class="row">
                              <div class="col-md-12">
                                <div class="form-group">
                                  <label for="field-1" class="control-label">User Role</label>
                                  <select class="form-control" name="role">
                                    <option>Partner</option>
                                    <option>Admin</option>
                                    <option>User</option>
                                  </select>
                                </div>
                                <button type="submit" value="<%=users._id%>" name="userroleid" class="btn btn-primary">Submit</button>
                              </div>
                            </div>
                          </div>
                        </form>

                      </div>
                    </div>
                  </div>
                  <%});%>
                </tbody>

Вот мой app.js, где я ищупользователей и передайте их EJS:

    app.get("/users", function(req, res) {
    if (req.isAuthenticated() && req.user.role === "Admin") {

    User.find({}, function(err, foundUsers) {
      if (err) {
        console.log(err);
      } else {
        res.render("users", {
          users: foundUsers,
          name: req.user.name.replace(/ .*/, ''),
          email: req.user.username,
        });
      }
    });
  } else {
    res.redirect("/login");
  }
});

Все теги <% = users ...%> работают внутри таблицы, но не внутри всплывающих окон.Внутри всплывающего окна он просто отображает информацию от первого пользователя в базе данных, что очень странно.

Я был бы очень благодарен за любую помощь.Спасибо!

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Ваш код ejs хорош. Я думаю, что проблема в идентификаторе каждого модала.
Для каждого пользователя вы генерируете модал с id="con-close-modal", поэтому все ваши модалы имеют одинаковый идентификатор. В результате каждая кнопка отправки (все они имеют same data-target="#con-close-modal") запускает один и тот же модал, возможно, первую. Я рекомендую дать каждому модалу уникальный идентификатор, например

<div id="<%= users._id %>" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="display: none;">

и дайте каждой кнопке отправки правильный data-target атрибут

<button type="submit" ... data-target="#<%= users._id %>"...></button>
0 голосов
/ 05 июня 2019

Я могу ошибаться, но, поскольку во всплывающем окне отображается только информация от первого пользователя, вам может понадобиться конкретный идентификатор пользователя, чтобы отделить ссылку.У меня была похожая проблема с проектом, за исключением того, что это была ссылка на новое представление вместо всплывающего окна.

Я надеюсь, что эта документация может помочь

https://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html

...