Я практикую node.js и подаю небольшую заявку на аукцион, используя node.js, express и e js. Я выполняю проверку ввода на стороне сервера, а затем визуализирую страницу и отправляю ошибки в представление. Когда я впервые получаю запрос на получение элементов из рендеринга базы данных, я могу отправлять ошибки и сообщения в представление, но в почтовом запросе он не отображает страницу и не отправляет ошибки и сообщение. Я пробовал res.redirect, но он тоже не работает, просто показывает ту же страницу. Я могу видеть массив ошибок из пользовательского ввода на консоли, поэтому я получаю данные, которые мне нужны, я просто не могу правильно отобразить представление. Что я делаю не так? Почему я не могу отобразить страницу с данными после проверки? Вот аукцион. E js файл:
` <div class="container mt-2">
<div class="col-sm-12 col-md-8 mx-auto ">
<% mistakes.forEach(function(item){ %>
<div class="alert alert-danger text-center" role="alert"><%= item%></div>
<%}); %>
</div>
</div>`
Маршруты:
`
const express = require('express');
const router = express.Router();
const auctionController=require('../controllers/auctionController')
router.get('/', auctionController.getItems
);
router.post('/', auctionController.getBid)
module.exports = router;
`
файл контроллера:
`
const sql=require('mssql')
const configuration=require('../configDB')
let conn=new sql.ConnectionPool(configuration.config);
let request=new sql.Request(conn);
configuration.connection(conn)
let sqlGetItemsQuery=`SELECT * FROM item`;
const getItems=async (req,res)=>{
request.query(sqlGetItemsQuery,(err,data)=>{
if(err){
console.log(err)
}else{
res.render('auction', {items:data.recordset,mistakes:[], message:''})
}
})
}
const currentBid= async(bid)=>{
let sqlQueryGetBid=`SELECT item_current_bid from item where item_id=${bid}`;
let result = await new sql.Request(conn).
query (sqlQueryGetBid);
for(let i=0;i<result.rowsAffected;i++){
current=result.recordset[i].item_current_bid
}
return current
}
const getBid=(req,res)=>{
const {value,dataValue}=req.body
let errors=[]
let current;
currentBid(dataValue)
.then(result=>{
current=result
errors=bidValidation(value,current)
console.log(errors)
if(errors.length>0){
res.render('auction', {items:[],mistakes:errors, message:'there are errors'})
}else{
res.render('auction', {items:[],mistakes:errors, message:'there are no errors'})
}
})
}
const bidValidation=(bid, nextBid)=>{
let errors=[]
bid=parseInt(bid)
nextBid=parseInt(nextBid)
if(Number.isNaN(bid)){
errors.push('Bid has to be numeric value')
}
if(bid%5!==0){
errors.push('Bid has to be divisible by 5')
}
if(bid===nextBid){
errors.push('Bid has to be bigger than current one')
}
return errors
}
module.exports={
getItems,
getBid
}
`