Res.render не работает node.js + express + ejs - PullRequest
0 голосов
/ 26 мая 2020

Я практикую 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
    }

`

...