staminna
staminna

Reputation: 468

Calling a PUT to express from EJS

I am trying to call a restful api created in expressjs from EJS form.

I tried looking on google and stackoverflow, and trying lots of different methods.

orders.ejs:

 <ul class="orders">
<% for(var i=0; i<orders.length; i++) {%>
  <ul class="order">
    <p> coffee_id <span><%= orders[i].name %></span>
        amount: <span><%= orders[i].amount %></span>
        quantity <span><%= orders[i].quantity %></span>  </p>
  </ul>
<% } %>
</ul>



<div>
    <form action="/orders" method="POST" action="orders/?_method=PUT">
      <input type="text" placeholder="username" name="username">
      <input type="text" placeholder="coffee name" name="name">
      <input type="number" placeholder="amount" name="amount">
      <input type="number" placeholder="quantity" name="quantity">
      <button type="submit" id="order" >Submit</button>
    </form>
  </div>

nodejs.app.js:

app.post('/orders', (req, res) => {  // falta o EJS
  db.collection('orders').save(req.body, (err, result) => {
    if (err) return console.log(err)
      console.log(req.body);
    res.render('orders.ejs', {
      put: true
  });
  })
})

app.put('/orders/:coffeeid/:quantity', function(req, res) { ...
}

This code works fine individually calling them from Postman with the right parameters, but I need to call them both when I submit the EJS form.

app.get('/orders/:coffeeid',function(req, res) { 
  db.collection('orders').find({_id:req.params.coffeeid}).toArray, function(error,result){
      if(!error && result && quantity){
            return res.render('orders.ejs',{orders: result, coffeeid:result.coffeeid, quantity:'7'});  // <-- pass coffeeid to view
      }
  }
});

I need to read quantity also from the form and check for stock in the PUT, so for now I fixed it at '7'units, but now Cannot GET /orders

order view

Upvotes: 0

Views: 3083

Answers (1)

Saurabh Mistry
Saurabh Mistry

Reputation: 13669

route for get orders :

  app.get('/orders',function(req, res) { 
       // fetch all orders and display it to view 
  });

route for display edit page of order by coffeeid :

app.get('/orders/:coffeeid',function(req, res) { 
   var coffeeid= req.params.coffeeid;

   db.collection('orders').find({_id:coffeeid}).toArray,function(error,result){
     if(!error && result){
        return res.render('orders.ejs',{orders:result,coffeeid:result.coffeeid, quantity:'7'}); 
      }
    });

});

form :

 <form action="/orders/<%=coffeeid%>" method="POST">

      <input name="_method" type="hidden" value="PUT">
      <input type="text" placeholder="username" name="username">
      <input type="text" placeholder="coffee name" name="name">
      <input type="number" placeholder="amount" name="amount" value="">
      <input type="number" placeholder="quantity" name="quantity" value="<%=quantity%>">

      <button type="submit" id="order" >Submit</button>

   </form>

to update information route will be :

app.put('/orders/:coffeeid', function(req, res) { 
   var coffeeid= req.params.coffeeid;
   var quantity= req.body.quantity;

  // save to database 
}

Upvotes: 1

Related Questions