Client side, this is what I have happening:
function saveGrades() {
$.post("/savegrades", {classIndex: "classIndexId"}); }
Server side:
router.post('/savegrades', stormpath.loginRequired, function(req, res) {
console.log("Class index: " + req.body.classIndex);
console.log(req.body);
res.send(200);
});
My bodyParser settings are as follows:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
No matter what I have tried, req.body is empty and does not have the classIndex. What am I doing incorrectly? Why is the data not being posted to the server?
Edit: For the linked questions, I have gone through almost all relevant answers here and am unable to find a solution. It seems that that data is never being sent to the server whatsoever. The body is always empty when I check it with a debugger.
Can you please check the code,
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
implemented well before,
router.post('/savegrades',
Based on your comment,
Can you please trying adding Trying adding mime type (content type) in client.
Try this and send data through POSTMEN to verify that data is actually comming then send it through function
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
app.post('/savegrades', function(req, res) {
console.log("Class index: " + req.body.classIndex);
console.log(req.body);
res.send(200);
});
Related
On post request from POSTMAN req.body is sending the data but returns { } when submitting the form.
This is what I used as the middleware,
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));
but the word bodyParser is marked with the message 'bodyparser is deprecated'.ts(6385),
The declaration was marked as deprecated here.
I tried using,
app.use(express.json());
app.use(express.urlencoded({ extended: false}));
but still its returning { } on req.body
See the coding line when you are registering dependencies, if you register express json, that should be before your route, so it's look like :
const express = require('express');
const app = express();
// middleware registered here
app.use(express.json());
// then your route
app.post('/someroute', async (req,res,next) => {
const { param1, param2 } = req.body;
try {
console.log(`${param1} and ${param2} written in terminal);
res.send('ok');
} catch (err) {
res.send('oopps');
}
})
Are you sure you're using correct headers when you're sending your POST request?
For .json() parsing, your headers should contain: Content-Type: application/json
For urlencoded() form data parsing, your headers should contain: Content-Type: application/x-www-form-urlencoded
Can you also share the CURL of your Postman request?
I'm trying to get started with Twilio's Programmable Fax API and I have completed their getting started guide. However, when I receive the fax, I log the request body to the console. However, the body is just an empty object.
I'm not sure what is going wrong.
const http = require('http');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// Parse any incoming POST parameters
app.use(bodyParser.json({ extended: false }));
// Define a handler for when the fax is initially sent
app.post('/fax/sent', (req, res) => {
// Let's manually build some TwiML. We can choose to receive the
// fax with <Receive>, or reject with <Reject>.
console.log(req.body);
const twiml = `
<Response>
<Receive action="/fax/received" mediaType="application/pdf" storeMedia="true"/>
</Response>
`;
// Send Fax twiml response
res.type('text/xml');
res.send(twiml);
});
// Define a handler for when the fax is finished sending to us - if successful,
// We will have a URL to the contents of the fax at this point
app.post('/fax/received', (req, res) => {
// log the URL of the PDF received in the fax
console.log(req.body);
// Respond with empty 200/OK to Twilio
res.status(200);
res.send(req.body);
});
// Start the web server
http.createServer(app).listen(3000, () => {
console.log('Express server listening on port 3000');
});
And here is what I get back in the console. You can see the empty object that is logged...
Express server listening on port 3000
{}
UPDATE:
I changed the body parser middleware to use urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
And I get the object but I don't see a media url...
With later versions of Express, 4.16.0 - Release date: 2017-09-28, you don't need to require body-parser.
// Body Parser Middleware
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
BodyParser has updated since their documentation was written. You need to do
app.use(bodyParser.urlencoded({ extended: false }));
I have the below code. when I make a Post request via Postman I get req.body as undefined.
Post Request is http://localhost:1702/es.
Body:
{
"ip_a":"191.X.X.XX",
"pkts":34
}
and Content-Type:"application/json". I also used application/x-www-form-urlencoded but got the same result.
My app.js is:
var express = require('express');
var es=require('./routes/es');
var app = express();
app.post('/es',es.postesdata);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
And my file where I am receiving a request body null is:
exports.postesdata=function(req,res){
var body=req.body;
console.log(body);//Getting Undefined here
}
Am I doing something wrong here?
express runs middleware in order try:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/es',es.postesdata);
I've looked at various posts on this topic but am still running into an error with this.
Python code:
import requests
import json
url = 'http://127.0.0.1:8080/ay'
payload = {'some': 'data'}
r = requests.post(url, data=payload)
print r.text
print r.status_code
Node.js code:
var app = express();
app.use(bodyparser.urlencoded({
extended: true
}));
app.use(bodyparser.json());
app.post('/ay', function(req, res){
console.log(req.body);
res.send('done');
});
So I've looked at my req and even req.body but req.body returns undefined so I think it's with json=payload but I've also tried params=payload and data=json.dumps(payload)
Edit: I forgot to include bodyparser and urlencoded. I edited my code to show the changes.
You have to use body-parser to get JSON from request body
var bodyparser = require('body-parser');
app.use(bodyparser.json());
When using the following:
var app = require('express')();
var bodyParser = require('body-parser');
app.post('/test', bodyParser.json(), function(req, res) {
res.json(req.body);
});
var port = 4040;
app.listen(port, function() {
console.log('server up and running at port: %s', port);
});
and the following post from Postman:
I get an empty response. I've followed a lot of threads on using bodyParser.json() and for some reason I'm still receiving an empty object in response. What am I missing?
To make bodyParser.json works you should provide Content-Type header with value application/json in your requests.
A safer way to use body-parser would be to apply it as middleware for the entire app. The code will have to be refactored in this manner:
// Permit the app to parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
// Use body-parser as middleware for the app.
app.use(bodyParser.json());
app.post('/test', function(req, res) {
res.json(req.body);
});
When you make a request on Postman, make sure to select the x-www-form-urlencoded tab as opposed to the raw tab.