bodyparse text data in express - node.js

I am trying to get data sent by postman row->text data but fail to get.
I am able to print complete body but how do i print body param?
body is in the form of query string.
NodeCode:
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
app.use(bodyParser.text());
app.post('/data/UploadLogsToServer', async (req, res) => {
return res.json(req.body);
});
above code prints complete body like
But How do i fetch only Store parameter from query string ?

querystring npm module resolved my problem
Solution:
var querystring = require('querystring');
app.post('/data/UploadLogsToServer', async (req, res) => {
var q = querystring.parse(req.body);
return res.json(q.Store);
});

Related

POST req body return empty array

i have a problem when POST some data in POSTMAN my problem is during "post" method /auth/login req.body return empty array.
Postman return empty object only if i use POST method with use form-data, if i change to xxx-www-form-urlencoded whatever works fine. I wanna know why it works so
const express = require('express');
const mongoose = require('mongoose');
const app = express();
require('dotenv').config();
const port = process.env.PORT || 5000;
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use("/static", express.static(__dirname + "/assets"))
app.post('/auth/login', (req, res) => {
res.status(200).json(req.body)
})
mongoose.connect("mongodb://localhost:27017")
.then(() => {
app.listen(port, () => {
console.log('port' + port)
})
})
I'm assuming you mean application/x-www-form-urlencoded instead of xxx-www-form-urlencoded and you mean multipart/form-data instead of form-data.
These 2 content-types are completely different encodings. When you called:
app.use(express.urlencoded({ extended: true }));
You added a middleware that can parse application/x-www-form-urlencoded, but that does not mean it automatically parses other formats too. It's only for that format, just like express.json() is only for the application/json format.
I solved this, i just created multer in my controller and it work how i wanted
const express = require('express');
const router = express.Router();
const { getUsers, createNewUser } = require('../controllers/newUser')
const path = require('path');
const multer = require('multer');
const upload = multer();
router.get('/', getUsers)
router.get('/:id', (req, res) => res.send('get single user'))
router.post('/', upload.none(), createNewUser)
module.exports = router;

How to get API post request with json data

I'm triyng to make an API request using postman and body raw data, but I can't read the data on server side.
My request:
http://prntscr.com/n38hes
http://prntscr.com/n38hq9
I've already tried:
app.post('/test', function (req, res) {
console.log(req.query)
})
and:
app.post('/test', function (req, res) {
console.log(req.body)
})
but both of them prints {}
I would like to obtain the username and the password for the request I made using postman.
Make sure you have body parser configured.
var bodyParser = require('body-parser');
//here app is express app
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());

Strange Response from express server

I created a simple server using expressjs and have post method but I got strange response to post article and I don't know why it happened. Could anyone mind helping me?
my expected is a JSON format.
Here is my app.js file
const express = require('express');
const mongoose = require('mongoose');
const articleModel = require('./models/article');
const bodyParser = require('body-parser');
enter code here
const db = mongoose.connect('mongodb://0.0.0.0:27017/bbs-api');
const app = express();
const port = process.env.PORT || 3000;
//support parsing of application/x-www-form-urlencoded post data
app.use(bodyParser.urlencoded({extended:true}));
// support parsing of application/json type post data
app.use(bodyParser.json());
const bbsRouter = express.Router();
bbsRouter.route('/articles').post( (req, res) => {
console.log(req.body);
// const newArticle = new articleModel(req.body);
// newArticle.save();
// res.status(201).send(newArticle);
res.send(req.body);
});
app.use('/api', bbsRouter);
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log('Example app listening on port 8000!'))
My postman. I log request body out but it is not as my expectation.
if you are sending form data(application/x-www-form-urlencoded) the you can do
bbsRouter.route('/articles').post( (req, res) => {
console.log(req.params);
// const newArticle = new articleModel(req.body);
// newArticle.save();
// res.status(201).send(newArticle);
res.send(req.params);
});
You're sending the wrong request body via postman, your body should be JSON format, not form data
Try removing body-parser and use middlewares directly from express and set urlencoded to false:
app.use(express.urlencoded({extended:false}));
// support parsing of application/json type post data
app.use(express.json());
See here urlencoded option documentation

Can't get POST data using NodeJS/ExpressJS and Postman

This is the code of my server :
var express = require('express');
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.json());
app.post("/", function(req, res) {
res.send(req.body);
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
From Postman, I launch a POST request to http://localhost:3000/ and in Body/form-data I have a key "foo" and value "bar".
However I keep getting an empty object in the response. The req.body property is always empty.
Did I miss something?
Add the encoding of the request. Here is an example
..
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
..
Then select x-www-form-urlencoded in Postman or set Content-Type to application/json and select raw
Edit for use of raw
Raw
{
"foo": "bar"
}
Headers
Content-Type: application/json
EDIT #2 Answering questions from chat:
why it can't work with form-data?
You sure can, just look at this answer How to handle FormData from express 4
What is the difference between using x-www-form-urlencoded and raw
differences in application/json and application/x-www-form-urlencoded
let express = require('express');
let app = express();
// For POST-Support
let bodyParser = require('body-parser');
let multer = require('multer');
let upload = multer();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/api/sayHello', upload.array(), (request, response) => {
let a = request.body.a;
let b = request.body.b;
let c = parseInt(a) + parseInt(b);
response.send('Result : '+c);
console.log('Result : '+c);
});
app.listen(3000);
Sample JSON and result of the JSON:
Set Content-typeL application/JSON:
I encountered this problem while using routers. Only GET was working, POST, PATCH and delete was reflecting "undefined" for req.body. After using the body-parser in the router files, I was able to get all the HTTP methods working...
Here is how I did it:
...
const bodyParser = require('body-parser')
...
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));
...
...
// for post
router.post('/users', async (req, res) => {
const user = await new User(req.body) // here is where I was getting req.body as undefined before using body-parser
user.save().then(() => {
res.status(201).send(user)
}).catch((error) => {
res.status(400).send(error)
})
})
For PATCH and DELETE as well, this trick suggested by user568109 worked.
On more point I want to add is if you created your project through Express.js generator
in your app.js it also generates bellow code
app.use(express.json());
if you put your body-parser above this code the req.body will return null or undefined
you should put it bellow the above code see bellow for correct placement
app.use(express.json());
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
I experienced the same issue. I tried all that had been suggested here. I decided to console log the value of the request object. It's a huge object. Inside this object I saw this query object carrying my post data:
query: {
title: 'API',
content: 'API stands for Application Programming Interface.'
}
So it turns out that request.query, and not request.body, contains the values I send along with my post request from Postman.

Post params not able to grab from postman + node js

I have the following code in my routes file:
router.post('/submit', function(req, res) {
var email = req.body.email;
console.log(email);
});
I am making a post call from postman with following details:
http://localhost:3000/login/submit
params:
email=abcxyz#gmail.com
and headers i have tried both
Content-Type:application/json
and
Content-Type: application/x-www-form-urlencoded
Also, I have body parser separately installed with following in app.js
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
But, The console log for email shows 'undefined'. Why am i not able to grab the post params with req.body.email.
In my case
http://127.0.0.1:3000/submit
router.post('/submit', function(req, res) {
console.log("Your Email is "+req.body.email);
res.end(); // if you not end the response it will hanging...
set your header type only
Content-Type application/x-www-form-urlencoded
Body
Console output
I faced the similar issue and got it working, please follow the below steps
In Headers tab put content type as below
Content-Type: application/x-www-form-urlencoded
In Body tab select x-www-form-urlencoded checkbox and put params.
email=abcxyz#gmail.com
Now in your node app use below code
router.post('/submit', function(req, res) {
var email = req.body.email;
console.log(email);
});
[let express = require('express');
let app = express();
// For POST-Support
let bodyParser = require('body-parser');
let multer = require('multer');
let upload = multer();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/api/sayHello', upload.array(), (request, response) => {
let a = request.body.a;
let b = request.body.b;
let c = parseInt(a) + parseInt(b);
response.send('Result : '+c);
console.log('Result : '+c);
});
app.listen(3000);
Please see the below example in the link
https://stackoverflow.com/questions/41955103/cant-get-post-data-using-nodejs-expressjs-and-postman/53514520#53514520
This will help you][1]
Set Body
Set Content-type

Resources