У меня есть такая структура:
/entries POST
/entries GET
, поэтому после почтового запроса я помещаю результат из базы данных в res.locals
и перенаправляю на /entries
.
, но когда я получить перенаправление на /entries
, я вижу в консоли, что код, который я написал в app.post
, запускается снова.
вот мой код:
router.get("/entries", verifyUser, (req, res) => {
console.log("gdgdgdegdge: ", res.locals.entries);
res.render("entries", {
user: res.locals.decodedClaims,
entries: res.locals.entries
});
});
router.post(
"/entries",
verifyUser,
[
check("subject")
.not()
.isEmpty()
.isAlphanumeric()
.trim()
.escape(),
check("hours")
.not()
.isEmpty()
.isAlphanumeric()
.trim()
.escape()
],
async (req, res) => {
// Finds the validation errors in this request and wraps them in an object with handy functions
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
console.log(req.body);//this gets logged again.
let subject = req.body.subject;
let hours = req.body.hours;
const entriesCol = await db.collection("entries").get();
const entriesDocs = await entriesCol.docs.map(query => {
return {
subject: query.data().subject,
hours: query.data().hours,
owner: query.data().owner
};
});
const matched = await entriesDocs.filter(entry => {
return subject === entry.subject && hours === entry.hours;
});
console.log("matched: ", matched); //this gets logged again.
res.locals.entries = matched;
res.redirect(200, "/entries");
res.end();
}
);
это происходит также, если я повторно ссылаюсь на sh страницу несколько раз. но если я сделаю запрос get
на другой странице, я получу эту ошибку:
TypeError: C:\Users\mendi\Desktop\chavruta\views\entries.ejs:1
>> 1| <% entries.forEach(entry=>{ %> <%= entry.subject %> <%= entry.hours %> <%=
2| entry.onwer %> <% }) %>
3|
Cannot read property 'forEach' of undefined
at eval (C:\Users\mendi\Desktop\chavruta\views\entries.ejs:10:16)