Переменные, переданные с узла, не будут отображаться в файле E JS - PullRequest
0 голосов
/ 09 апреля 2020

Я внедряю на своем сайте страницу «Настройки», с помощью которой пользователи могут изменить свой адрес электронной почты и пароль и т. Д. c. На странице настроек я хочу отобразить адрес электронной почты, назначенный пользователю в данный момент.

router.get("/settings", middleware.isLoggedIn, (req, res) => {
    User.find({ "username": req.user.username }, (err, foundUser) => {
        if (err) {
            console.log("error finding user" + err);
        } else {
            console.log(foundUser);
            var emailAddress = foundUser.email;
            res.render("settings", { email: emailAddress });
        }
    })
})

Достаточно просто, console.log правильно печатает данные пользователя примерно так:

[
  {
    _id: 5e89b7b8a2936f4d3422ffc4,
    username: 'cafenero',
    email: 'cafe@nero',
    __v: 0
  }
]

Но по какой-то причине, когда я пытался использовать дату в моем .e js файл, там переменная не отображается!

            <label for="email">Email Address</label>
            <input type="text" class="form-control" id="email" name="email" value="<%=email%>">

Значение просто пустое на странице! Что я делаю неправильно? Спасибо!

1 Ответ

3 голосов
/ 09 апреля 2020

User.find({ возвращает массив данных. Чтобы получить электронное письмо, вам нужно получить доступ к первому элементу, чем электронное письмо.

Измените var emailAddress = foundUser.email; на var emailAddress = foundUser[0].email;

console.log(foundUser);
var emailAddress = foundUser[0].email;
res.render("settings", { email: emailAddress });

Или используйте findOne вместо find

User.findOne({ "username": req.user.username }, (err, foundUser) => {
        if (err) {
            console.log("error finding user" + err);
        } else {
            console.log(foundUser);
            var emailAddress = foundUser.email;
            res.render("settings", { email: emailAddress });
        }
    })
...