Home > OS >  How can I make an entry to MongoDB with this app?
How can I make an entry to MongoDB with this app?

Time:10-19

Between my app and Postman I should be able to make an entry into MongoDB, but I get this.
TypeError: Cannot read property 'title' of undefined

This is the app.js file

const express = require('express');
const app = express();
const Mongoose = require('mongoose');
require('dotenv/config')
const postsRoute = require('./routes/posts');

app.use('/posts', postsRoute)

app.use('/posts', () => {
    console.log('This is a middleware.')
})

app.get('/', (req, res) => {
    res.send('We are at home')
})

//Connect to DB
Mongoose.connect(process.env.DB_CONNECTION)
.then(() => {
    console.log('connected to DB')
})
.catch(err => {
    console.log(err);
});


app.listen(3000);

This is the posts.js file

const express = require('express');
const router = express.Router();
const Post = require('../models/Post')
var fs = require('fs');

router.get('/', (req, res) => {
    res.send('We are at posts')
})

router.post('/', (req, res) => {
    const post = new Post({
        title: req.body.title,
        description: req.body.description
    });
    post.save()
        .then(data => {
            res.json(data);
        })
        .catch(err => {
            res.json({message: err });
        })
});

module.exports = router;

This file is the Mongoose Schema

const { json } = require('body-parser');
const mongoose = require('mongoose');


const PostSchema = mongoose.Schema({
    title: {
        type: JSON,
        required: true
    },
    description: {
        type: JSON,
        required: true
    },
    date: {
        type: Date,
        default: Date.now
    }
});

module.exports = mongoose.model('Posts', PostSchema);

Then I'm trying to post to MongoDB, through the app with Postman Hopefully this photo should suffice.

Postman

The app is running fine locally on port 3000 and I do believe I am connecting to the database. It seems like a format problem. I don't know if the schema needs to be in JSON somehow or a configuration of Postman needs to change, but I have tried every Postman setting and tried changing the schema to JSON. I also had the type in the Mongoose file as type: String

CodePudding user response:

Add this in app.js for POST Request...

app.use(express.json());

app.use(express.urlencoded({ extended: false }));

Add that middleware on top of your routes.

  • Related