Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

129
Views
How do I perform a POST request properly?

Working on a simple API. Managed to get the GET & DELETE requests working, but I have some issues with the POST request. Pretty sure this is a noobie mistake, but I'm missing the logic here.

This is the file where all the routes are defined.

import express from 'express';    
import fs from 'fs';

const router = express.Router();

'use strict';
let rawdata = fs.readFileSync('api/resources/vehicles.json');
let vehicles = JSON.parse(rawdata);
let vehiclesArray = vehicles.vehicles;

let data = JSON.stringify(vehicles);
fs.writeFileSync('api/resources/vehicles.json', data);

router.get('/', (req, res, next) => {
    res.status(200).json(vehiclesArray);
});

router.get('/:id', (req, res, next) => {
    let id = req.params.id;
    res.status(200).send(vehiclesArray[(id-1)]);
});

router.delete('/:id', (req, res, next) => {
    let id = req.params.id;
    const removedVehicle = vehiclesArray.splice(id, 1);
    res.status(200).json({
        message: `Vechicle ${removedVehicle} with id ${id} was removed`
    });
});

router.post('/', (req, res, next) => {
    let id = vehiclesArray.length + 1;
    
    const vehicle = { 
        "id" : id, 
        "type" : req.params.type, 
        "brand" : req.params.brand, 
        "model" : req.params.model, 
        "production_year" : req.params.production_year, 
        "kilometers_driven" : req.params.kilometers_driven, 
        "price" : req.params.price
    };
    
    res.status(201).send({
    message: `POSTed new vehicle: ${vehicle}`,
    vehicle: vehicle
});
    res.status(201).send(vehiclesArray.push(vehicle));
    
});

export default router;

Inside my POST method I defined the vehicle, but once I try sending it I get the following in Postman, namely a confirmation of an added object and the object, but only with the id property enter image description here

Can someone please give me a hint maybe on what I'm doing wrong? Do I also need a class declaration? Thanks!

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Look at the API documentation for params:

This property is an object containing properties mapped to the named route “parameters”. For example, if you have the route /user/:name, then the “name” property is available as req.params.name. This object defaults to {}.

Now look at your route.

router.post('/', (req, res, next) => {

You don't have any params there. So that can't be the right thing.


Now look at your Postman screenshot you are filling out data on the tab labelled Body.

Go back to the API document and skim through the list of properties.

req.body is listed there and says:

Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated when you use body-parsing middleware such as express.json() or express.urlencoded().


So set up a body-parsing middleware, then change the data you are POSTing so it is actually in that format (your screenshot shows you are entering raw data which is almost-but-not-quite-JSON so you need to fix that), make sure that you go into the Headers section and set the Content-Type header to describe the format you are sending, then look at req.body instead of req.params.

about 4 years ago · Juan Pablo Isaza Report

0

As advised by @Quentin: I installed the body-parser and included it in my code.

import bodyParser from "body-parser";
router.use(express.json());
router.use(bodyParser.urlencoded({ extended: true }));

Then I changed the req.param* to req.body* in the post function body.

router.post('/:id', (req, res, next) => {
    let id = vehiclesArray.length + 1;
    
    const vehicle = { 
        "id" : id, 
        "type" : req.body.type, 
        "brand" : req.body.brand, 
        "model" : req.body.model, 
        "production_year" : req.body.production_year, 
        "kilometers_driven" : req.body.kilometers_driven, 
        "price" : req.body.price
    };
    
    res.status(201).send({vehicle: vehicle});
    res.status(201).send(vehiclesArray.push(vehicle));  
    
});

As a last step, I changed the body type in Postman to x-www-form-urlencoded. POST below , localhost:3000/vehicles/:id Upon completing the

GET below, just to check if the object was indeed added: enter image description here

Also helpful in my endeavor: https://www.npmjs.com/package/body-parser

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!