Home > Mobile >  req.body undefined after post on express.js v8.1.4?
req.body undefined after post on express.js v8.1.4?

Time:12-05

I want to make a post request with this HTML code:

<!DOCTYPE html>
<form action="/post-test" method="post">
    <input type="text" id="name" />
    <input type="submit" value="submit">
</form>

And then write on the backend console the request. So here is my backend code:

const path = require('path');
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(express.static(path.join(__dirname, 'views')));
    
app.use(bodyParser.json());
    
app.get('/', function(req, res) {
    res.sendFile(path.join(__dirname, "/views/html/test.html"));
});
app.post('/post-test', async function(req, res) {
    const data = req.body;
    console.log(data.name);
    });

When I type something in the input and press submit, the console say undefined. Where is the problem and have you the solution ?

CodePudding user response:

in the form add the name parameter and put a value, that is insert in the body of the request

<form action="post-test" method="post">
    <input type="text" id="name" name="name"/>
    <input type="submit" value="submit">
</form>

in the backend you access with

req.body.name

CodePudding user response:

change form action to route name

<form action="/createGazme" method="post">
</form>

CodePudding user response:

You have multiple problems.

Typo in the path

action="/post-test" and app.post('/createGazme' need to match

Form controls post name=value data

Your input doesn't have a name so it won't post any data. Give it one.

<input type="text" name="name">

The id attribute is used for client-side purposes such as being a link target or associating a <label> using a for attribute.

Your body parser is for the wrong data type

Forms, by default, post data in application/x-www-form-urlencoded. You can use the enctype attribute to change that to multipart/form-data.

Your body parser — app.use(bodyParser.json()); can only process application/json bodies. You need a body parser that supports the data format you are actually using.

The body-parser module is obsolete anyway. Express has a built-in one.

express.json() will do what your current module does (and still not work).

express.urlencoded() will support your form.

app.use(bodyParser.urlencoded());
  • Related