#javascript #node.js #mongoose #compiler-errors
Вопрос:
Получена ошибка ниже при попытке добавить логику выпадающего списка на панель навигации. Ошибка:
SyntaxError: /Users/myfile/app/views/layouts/boilerplate.ejs:22
20|
21| <body class="d-flex flex-column vh-100">
>> 22| <%- include('../partials/navbar') %>
23|
24| <main class="container mt-5">
25| <%- include('../partials/flash') %>
Unexpected token 'else' in /Users/myfile/app/views/partials/navbar.ejs while compiling ejs
If the above error is not helpful, you may want to try EJS-Lint:
https://github.com/RyanZim/EJS-Lint
Or, if you meant to create an async function, pass `async: true` as an option.
Вот моя навигационная панель:
<nav class="navbar sticky-top navbar-expand-lg navbar-dark" style="background-color: #00305a;">
<div class="container-fluid">
<a class="navbar-brand" href="#">Company</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup"
aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a class="nav-link active" href="#">Home</a>
<a class="nav-link active" href="/events">Events</a>
<a class="nav-link active" href="/artists">Artists</a>
</div>
<div class="navbar-nav ms-auto">
<% if(currentUser) {%>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="/artists/<%=artist.id%>/edit">Edit profile</a></li>
<li><a class="dropdown-item" href="/logout">Logout</a></li>
</ul>
<% } %>
</li>
<a class="nav-link active" href="/logout">Logout</a>
<% } else { %>
<a class="nav-link active" href="/login">Login</a>
<a class="nav-link active" href="/artists/new">Sign Up</a>
<% } %>
</div>
</div>
</div>
</nav>
Вот часть моего шаблонного макета, которая включает навигационную панель:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Boilerplate!!</title>
</head>
<body class="d-flex flex-column vh-100">
<%- include('../partials/navbar') %>
<main class="container mt-5">
<%- include('../partials/flash') %>
<%- body %>
</main>
<%- include('../partials/footer') %>
</body>
</html>
Я думаю, это потому, что я должен определить глобальную переменную на своем app.js но не уверен, что это именно так. Включая мое приложение.используйте переменные для контекста:
app.use((req, res, next) => {
console.log(req.session);
res.locals.currentUser = req.user;
res.locals.success = req.flash('success');
res.locals.error = req.flash('error');
next();
})
Как мне открыть раскрывающийся список на панели навигации, чтобы пользователь мог «редактировать» свой профиль?
Комментарии:
1. Вы должны
if () { }} else
удалить<% } %>
или переместить остальное вверх2. Когда я это делаю, я получаю ошибку»исполнитель не определен» из строки <li><li><a class= «выпадающий список» href=»/исполнители/<%=artist.id%>/изменить»<%=artist.id%>>Изменить профиль<%=artist.id%>></a></a></li>. Вот почему я думал, что должен определить это глобально?
Ответ №1:
У вас есть дополнительная <% } %>
html-страница на панели навигации. Просто удалите этот тег после </ul>
Комментарии:
1. Спасибо @ашан Джамал, вы правы, мне действительно нужно удалить эту скобку, но когда я это делаю, я получаю ошибку»исполнитель не определен» из строки <li><li><a class=»выпадающий список» href= «/художники/<%=artist.id%>/изменить»<%=artist.id%>>Редактировать профиль<%=artist.id%>></a></a></li>. Вот почему я думал, что должен определить это глобально?
Ответ №2:
Понял это— Мне пришлось изменить имя переменной ejs, потому что я уже определил текущего пользователя:
От: href=»/исполнители/<%=artist.id%>/изменить»<%=artist.id%>>Изменить профиль
Кому: href=»/исполнители/<%=currentUser.id%>/изменить»<%=currentUser.id%>>Изменить профиль
Идентификатор художника уже был передан в CurrentUser, поэтому я смог вытащить его оттуда.