3
votes

I'm currently designing a simple browser application utilizing express. I'm trying to extract the value a user selects in a drop down menu. I gave each option an individual value as well and have declared the method of the form as /post. but when I try which value they selected by going into the req.body, the value is undefined.

I recognize that the problem could lie with the body parser from browsing through similar questions (Example, Example1) but the solutions from these questions don't keep req.body from being undefined.

Here's my code for the app construction

const app = express()
app.use(express.static(__dirname, ''));
app.engine('html', require('ejs').renderFile);
app.set('views', __dirname + '/public/views');
app.use(express.urlencoded());
app.set('view engine', 'html');
const server = http.createServer(app);

And here's the code for the post handling

app.get('/detailed', function(req,res){
    res.send(displayDetailed(results, req));
});
app.post('/detailed', function(req,res){
    res.send('Hello world');
    console.log(req.body);

});

When I post something in localhost:8080/detailed, the hello world returns just fine, but req.body is an empty (returns as {}). The displayDetailed function is a custom function that returns a html string with values extracted from a get request from the google sheets API. Since I'm not working with a saved html document, could this be affecting the process?

4
how do you call /detailed? I mean, how do you "post something"? Also, you're not using bodyParser as far as I'm concerned - Lyubomir
can you please tell how are you posting data? - Yamini Chhabra
Maybe this will solve your problem: stackoverflow.com/questions/9177049/… - Dvoliq
@YaminiChhabra I'm trying to post the result of a form that consists various selects and a submit button which triggers the post. However, this is done within an asynchronous function. Could this cause the bodyparser to skip over the result? - dropTableUsers
@dropTableUsers No, this should not be the reason, post your async function please. - Yamini Chhabra

4 Answers

6
votes

Most of the time req.body is undefined due to missing JSON parser

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

could be missing for the body-parser

const bodyParser  = require('body-parser');
app.use(bodyParser.urlencoded({extended: true}));

and sometimes it's undefined due to cros origin so add them

const cors = require('cors');
app.use(cors())
4
votes

Did you setup the body parser for express to use? you can just npm install body-parser and then put these into your code.

const bodyParser = require('body-parser')
app.use(bodyParser.json())

Hope this can help!

1
votes

When calling req.body outside of the async function (where the function constructing the html was called), req.body returned perfectly fine. I'll be modifying my project to account for this. I should have put this in the original question, but it did not seem relevant when I was writing the question. Thanks to everyone who responded

1
votes

This will solve your issue:

App.use(bodyParser.urlencoded({extended: true}));