How do I consume the JSON POST data in an Express application

express, json, node.js

Solution

I think you're conflating the use of the `response` object with that of the `request`.

The `response` object is for sending the HTTP response back to the calling client, whereas you are wanting to access the body of the `request`. See this answer which provides some guidance.

If you are using valid JSON and are POSTing it with `Content-Type: application/json`, then you can use the `bodyParser` middleware to parse the request body and place the result in `request.body` of your route.

Update for Express 4.16+

Starting with release 4.16.0, a new `express.json()` middleware is available.

var express = require('express');

var app = express();

app.use(express.json());

app.post('/', function(request, response){
  console.log(request.body);      // your JSON
   response.send(request.body);    // echo the result back
});

app.listen(3000);

Updated for Express 4.0 - 4.15

Body parser was split out into its own npm package after v4, requires a separate install `npm install body-parser`

var express = require('express')
  , bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.json());

app.post('/', function(request, response){
  console.log(request.body);      // your JSON
   response.send(request.body);    // echo the result back
});

app.listen(3000);

For earlier versions of Express (< 4)

var express = require('express')
  , app = express.createServer();

app.use(express.bodyParser());

app.post('/', function(request, response){
  console.log(request.body);      // your JSON
  response.send(request.body);    // echo the result back
});

app.listen(3000);

Test along the lines of:

$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/
{"MyKey":"My Value"}

Problem

I'm sending the following JSON string to my server. ``` ( { id = 1; name = foo; }, { id = 2; name = bar; } ) ``` On the server I have this. ``` app.post('/', function(request, response) { console.log("Got response: " + response.statusCode); response.on('data', function(chunk) { queryResponse+=chunk; console.log('data'); }); response.on('end', function(){ console.log('end'); }); }); ``` When I send the string, it shows that I got a 200 response, but those other two methods never run. Why is that?

Original source

Related problems