RPE
RPE

Reputation: 1

Trying to update a my Express Data base using postman

How do I update my database using Postman?

I'm trying to learn Express using Postman to test different types of requests, but I can't figure out how to update my data set. This is the structure of the data set I'm using.

var DB = [     
{ category: 'Pets',  
 products: [              
{ name: 'banjo',    
color: 'grey',     
mean: true,    
description: "meows"              
},              
{ name: 'rigby',  
color: 'black and white',  
mean: false,  
description: 'barks'              
}]}] 
Lets say I want to add another pet into the pets category so in products

{name: frank, color: orange, : mean: false: description: glubs}

I cant figure out how to add it correctly in Postman so that itll update. My code for the update is as follow:

app.post("/product/add", (req, res) => {    
 var category = req.body.category;     
const { name, color, mean, description } = req.body;     
var product = { name:name,  color:color, mean:mean, description:description };     console.log(product);     
var index = DB.findIndex(x => x.category == category);     
if(index !== -1){         
var indexProduct = DB[index].products.findIndex(x => x.name == product.name);         if(indexProduct !== -1){            
DB[index].products.push(product);            
res.status(200).send(DB);         
} else {            
 res.status(200).send(`Product already added to category.`);         
};     
} else {         
res.status(200).send(`Category not found.`);     
} }); 

Thanks in advance! Also sorry for the format.

Upvotes: 0

Views: 212

Answers (1)

rags2riches-prog
rags2riches-prog

Reputation: 1761

There are a lot of repetitions, destructured variables that are not needed and syntactic errors in your code. Start by breaking down your problem into smaller chunks that are more manageable and then, test your endpoint with postman.

Let's start with your data and how it is structured:

var DB = [{
category: 'Pets',
products: [{
        name: 'banjo',
        color: 'grey',
        mean: true,
        description: "meows"
    },
    {
        name: 'rigby',
        color: 'black and white',
        mean: false,
        description: 'barks'
    }
  ]
}]

// Lets say you want to add another pet into the pets category so in products

const obj = {
    name: "frank",
    color: "orange",
    mean: false,
    description: "glubs"
}

This is one of the things you could do to check if the object is not found and if not, you add it to your db.

DB.forEach((val) => {
   if (val.products.name !== obj.name) {
       DB[0].products.push(obj);
   } 
   
})

console.log(DB[0].products)

/**
 *[{
         name: 'banjo',
         color: 'grey',
         mean: true,
         description: 'meows'
     },
     {
         name: 'rigby',
         color: 'black and white',
         mean: false,
         description: 'barks'
     },
     {
         name: 'frank',
         color: 'orange',
         mean: false,
         description: 'glubs'
     }
 ]

*/

You postman request could look like this:

app.post("/product/add", (req, res) => {  
  // extract just what you need e.g name or ID if you have one...  
  const { name } = req.body;   
  // NOT efficient, best if you use a unique ID to look up  
  DB.forEach(value => {
     if (value.products.name !== name) {
        DB[0].products.push(req.body);
        return res.status(200).send(JSON.stringify(DB));
     }
     else
        return res.status(404).send("Not found or whatever");
  });
 });     
         

OR using Array.prototype.findIndex you could do:

app.post("/product/add", (req, res) => {   
  const { name } = req.body;   
  const index = DB.forIndex(value => value === name);
  if (index === -1) {
    DB[0].products.push(req.body);
    return res.status(200).send(JSON.stringify(DB));
  }
    
  else
    return res.status(404).send("Not found or whatever");
  }
 });     

Note: if your object name is the same than another one, your new object won't be pushed to the DB array. This would suggest you need to index your object with a unique identifier.

Upvotes: 1

Related Questions