2

I'm trying to post some data to a collection in MongoDB. Very basic. I'm new to both mongo and express and ran into some problems. Here are my code so far:

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

    <label for="first_name">First Name</label>
    <input type="text" id="first_name" name="first_name">

    <button type="submit">Submit</button>
</form>


const express = require('express');
const expressApp = express();

const MongoClient = require('mongodb').MongoClient;

const url = 'mongodb://localhost:27017/agile-app-db';

const dbName = 'agile-app-db';


//Post data
expressApp.post('/post' , function (request, response) {

    let member = {
        first_name: request.body.first_name
    };

    MongoClient.connect(url, function (error, db) {
        if (error) throw error;
        let databaseobject = db.db(dbName);
        databaseobject.collection('Members').insertOne(member, function (error, result) {
            if (error) throw error;
            console.log("Member inserted");
            db.close();
        });
    });

    response.redirect('/agileApp');

});

I'm running into the following error: TypeError: Cannot read property 'first_name' of undefined

Ole Pannier
  • 3,208
  • 9
  • 22
  • 33
egx
  • 389
  • 2
  • 14
  • I think you are missing the body-parser middleware. Check this out: https://stackoverflow.com/questions/9177049/express-js-req-body-undefined – Slava Logos Oct 31 '20 at 13:41

2 Answers2

1

Try using the body-parser middleware

const bodyParser = require('body-parser')

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
Ozgur Sar
  • 2,067
  • 2
  • 11
  • 23
1

You need to add middleware to your express app that parses the query string. Try adding expressApp.use(express.urlencoded({ extended: false })) before any routes.

Gabriel Lupu
  • 1,397
  • 1
  • 13
  • 29