Обработчики перенаправления URL в NODE.JS & EXPRESS - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь заставить функцию перенаправления работать, используя HTML-форму, которая перенаправляет на указанный URL-адрес

Это «база данных» (просто объект прямо сейчас):

let urlDatabase = {
b2xVn2: "http://www.cbc.ca", //keyname just a randomly assigned number
"9sm5xK": "http://www.google.com"
};

и вот как эта «база данных» передается на сервер:

app.get("/urls", (req, res) => {
//template vars is passed to urls_index EJS file
let templateVars = { urls: urlDatabase };   
res.render("urls_index", templateVars); 
});

«urls_index» - это файл представления ....

и моя форма в файле ejs вида (с именем "urls_index":

     <% for (let index in urls) { %>
     <ul> <li> <%=  urls[index] + ": " + index %>   <br>  
     <form method ="POST" action="/u/<%= urls[index] %>"><button 
     type="submit" class="btn btn-outline-danger btn-sm">Click here to 
      redirect to your page</button></form>

     </li> </ul>
     <% } %>

Мой обработчик в файле сервера:

app.get("/u/:id", (req, res) => {
let redirection = urlDatabase[req.params.id];
res.redirect(redirection);
});

при нажатии на форму следует перенаправить на соответствующую страницу URL (чтобы перенаправить в Google.com например).

Любая помощь приветствуется, спасибо.

1 Ответ

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

ejs использует ужасный javascript для циклов, а не цикл for x in y, как в python.

Это должно решить проблему:

<% for (var i=0; i<urls.length; i++) { %>
<ul> <li> <%=  url[i] + ": " + i %>   <br>  
<form method ="GET" action="<%= '/u/' + url[i] %>">
<button class="btn btn-outline-danger btn-sm">Click here to redirect to your page</button> 
//buttons have a default type="submit" so no need to add that
</form>

 </li> </ul>
 <% }; %>

Обратите внимание, что вы также можете использоватьтакой цикл for, если индекс массива не нужен:

<% urls.forEach(function(url) { %>

//do something with url

<% }); %>
...