Bird
Raised Fist0
Expressframework~20 mins

Testing POST with request body in Express - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Express POST Body Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the output when sending a JSON body to this Express POST route?

Consider this Express route that handles POST requests with JSON body parsing enabled.

const express = require('express');
const app = express();
app.use(express.json());

app.post('/data', (req, res) => {
  res.json({ received: req.body });
});

If a client sends a POST request to /data with JSON body {"name": "Alice"}, what will the server respond with?

Express
const express = require('express');
const app = express();
app.use(express.json());

app.post('/data', (req, res) => {
  res.json({ received: req.body });
});
A{"received":{"name":"Alice"}}
B{"received":"{\"name\": \"Alice\"}"}
C{"received":null}
DSyntaxError
Attempts:
2 left
💡 Hint

Remember that express.json() middleware parses JSON body into an object.

📝 Syntax
intermediate
2:00remaining
Which option correctly parses URL-encoded POST body in Express?

You want to parse URL-encoded form data sent in a POST request body in Express. Which middleware setup is correct?

Express
const express = require('express');
const app = express();

// Which middleware to use here?

app.post('/submit', (req, res) => {
  res.send(req.body);
});
Aapp.use(express.json());
Bapp.use(express.urlencoded({ extended: true }));
Capp.use(bodyParser.json());
Dapp.use(express.text());
Attempts:
2 left
💡 Hint

URL-encoded form data is not JSON. Use the middleware that parses URL-encoded bodies.

🔧 Debug
advanced
2:00remaining
Why does this Express POST route not receive the JSON body?

Look at this Express app code:

const express = require('express');
const app = express();

app.post('/api', (req, res) => {
  res.json(req.body);
});

app.use(express.json());

When sending a JSON POST request to /api, req.body is undefined. Why?

Express
const express = require('express');
const app = express();

app.post('/api', (req, res) => {
  res.json(req.body);
});

app.use(express.json());
Ares.json() cannot send objects
Bexpress.json() middleware is missing
Cexpress.json() middleware is used after the route, so body is not parsed yet
Dreq.body is always undefined in POST routes
Attempts:
2 left
💡 Hint

Middleware order matters in Express.

❓ state_output
advanced
2:00remaining
What is the value of req.body after sending a plain text POST request?

Given this Express setup:

const express = require('express');
const app = express();
app.use(express.text());

app.post('/text', (req, res) => {
  res.send(req.body);
});

If a client sends a POST request to /text with body Hello World (plain text), what will req.body contain?

Express
const express = require('express');
const app = express();
app.use(express.text());

app.post('/text', (req, res) => {
  res.send(req.body);
});
A"Hello World"
B{"Hello World"}
Cundefined
DSyntaxError
Attempts:
2 left
💡 Hint

express.text() parses plain text bodies as strings.

🧠 Conceptual
expert
3:00remaining
Which middleware combination correctly handles JSON and URL-encoded POST bodies simultaneously?

You want your Express app to accept POST requests with either JSON or URL-encoded form data bodies. Which middleware setup correctly supports both?

Express
const express = require('express');
const app = express();

// Middleware setup here

app.post('/submit', (req, res) => {
  res.json(req.body);
});
Aapp.use(express.raw()); app.use(express.urlencoded({ extended: true }));
Bapp.use(express.urlencoded({ extended: false })); app.use(express.json());
Capp.use(express.text()); app.use(express.json());
Dapp.use(express.json()); app.use(express.urlencoded({ extended: false }));
Attempts:
2 left
💡 Hint

Order of middleware matters, but both JSON and URL-encoded parsers must be included.

Practice

(1/5)
1. What is the main purpose of testing a POST request with a request body in Express?
easy
A. To verify the server correctly receives and processes the sent data
B. To check if the server can handle GET requests
C. To test the server's response time only
D. To confirm the server ignores the request body

Solution

  1. Step 1: Understand POST request role

    POST requests send data to the server, so testing ensures data is received and handled.
  2. Step 2: Identify testing goal

    Testing POST with a body checks if the server processes the data correctly, not just the response time or ignoring data.
  3. Final Answer:

    To verify the server correctly receives and processes the sent data -> Option A
  4. Quick Check:

    POST body testing = verify data handling [OK]
Hint: POST tests check data handling, not just response [OK]
Common Mistakes:
  • Confusing POST with GET request testing
  • Ignoring the request body in tests
  • Testing only response time without data validation
2. Which of the following is the correct way to send JSON data in a POST request test using Supertest in Express?
easy
A. request(app).post('/api').body({ name: 'John' })
B. request(app).post('/api').send({ name: 'John' })
C. request(app).post('/api').query({ name: 'John' })
D. request(app).get('/api').send({ name: 'John' })

Solution

  1. Step 1: Identify correct HTTP method and data sending

    POST requests use .post() and .send() to include JSON body data in Supertest.
  2. Step 2: Evaluate options

    The option with request(app).post('/api').send({ name: 'John' }) uses .post() and .send() correctly. Using .get() is wrong for sending body data. Using .query() sends URL params, not body data. Using .body() is not a Supertest method.
  3. Final Answer:

    request(app).post('/api').send({ name: 'John' }) -> Option B
  4. Quick Check:

    POST + .send() = correct syntax [OK]
Hint: Use .post() with .send() to send JSON body [OK]
Common Mistakes:
  • Using GET instead of POST for sending body data
  • Using .query() instead of .send() for body
  • Trying to use .body() method which doesn't exist
3. Given this Express route and test code, what will be the response body when the test runs?
app.use(express.json());
app.post('/user', (req, res) => {
  res.json({ received: req.body.name });
});

request(app)
  .post('/user')
  .send({ name: 'Alice' })
  .then(res => console.log(res.body));
medium
A. { "received": "Alice" }
B. { "name": "Alice" }
C. {}
D. Error: req.body is undefined

Solution

  1. Step 1: Understand route response

    The route sends back JSON with key 'received' set to req.body.name.
  2. Step 2: Analyze test request body

    The test sends { name: 'Alice' }, so req.body.name is 'Alice'.
  3. Final Answer:

    { "received": "Alice" } -> Option A
  4. Quick Check:

    Response body = { received: 'Alice' } [OK]
Hint: Response echoes req.body.name as 'received' key [OK]
Common Mistakes:
  • Expecting original body instead of transformed response
  • Forgetting to parse JSON body in Express (missing middleware)
  • Assuming empty response or error without middleware
4. You wrote this test for your Express POST route but it fails with an empty req.body. What is the likely cause?
app.post('/data', (req, res) => {
  res.json(req.body);
});

request(app)
  .post('/data')
  .send({ key: 'value' })
  .expect(200, { key: 'value' });
medium
A. The test expects wrong status code
B. Using .send() instead of .query() to send data
C. The route should use GET instead of POST
D. Missing middleware to parse JSON body like express.json()

Solution

  1. Step 1: Identify why req.body is empty

    Express needs middleware like express.json() to parse JSON body; without it, req.body is empty.
  2. Step 2: Check test and route setup

    The test sends JSON with .send(), which is correct; route uses POST correctly; status 200 is expected.
  3. Final Answer:

    Missing middleware to parse JSON body like express.json() -> Option D
  4. Quick Check:

    Missing express.json() = empty req.body [OK]
Hint: Add express.json() middleware to parse JSON body [OK]
Common Mistakes:
  • Not adding express.json() middleware
  • Confusing .send() with .query() for body data
  • Expecting req.body without parsing middleware
5. You want to test an Express POST route that accepts a JSON array in the request body and returns the array length. Which test code correctly sends the array and checks the response?
app.use(express.json());
app.post('/items', (req, res) => {
  res.json({ count: req.body.length });
});
hard
A. request(app).post('/items').send({ length: 3 }).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); });
B. request(app).post('/items').send('{1,2,3}').expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); });
C. request(app).post('/items').send([1, 2, 3]).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); });
D. request(app).post('/items').query([1, 2, 3]).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); });

Solution

  1. Step 1: Understand route expects JSON array body

    The route reads req.body.length, so the body must be an array.
  2. Step 2: Check test sending array correctly

    request(app).post('/items').send([1, 2, 3]).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); }); sends an actual array with .send(), which is correct. request(app).post('/items').send('{1,2,3}').expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); }); sends a string, not JSON array. request(app).post('/items').send({ length: 3 }).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); }); sends an object, not array. request(app).post('/items').query([1, 2, 3]).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); }); uses .query() which sends URL params, not body.
  3. Final Answer:

    request(app).post('/items').send([1, 2, 3]).expect(200).then(res => { if(res.body.count !== 3) throw new Error('Wrong count'); }); -> Option C
  4. Quick Check:

    Send array with .send() to test array length [OK]
Hint: Send array directly with .send() for JSON body tests [OK]
Common Mistakes:
  • Sending array as string instead of JSON
  • Using .query() instead of .send() for body data
  • Sending object with length property instead of array
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard