salvando dados para mongodb usando nodejs

Sep 22 2020

Estou aprendendo nodeJS, agora tentei inserir dados no MongoDB e esse é meu objetivo

insira valores aqui e uma vez que o botão enviar for clicado, deve salvar os dados com sucesso no mongodb e isso deve retornar uma mensagem de sucesso.

Mas esse é o erro

TypeError: Cannot read property 'location' of undefined

Aqui estão os snippets de código

const express = require('express');
const dotenv = require("dotenv").config();
const address = process.argv[2];
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const app = express();

//INSERT TO MONGO DB
//connect to mongo db
mongoose.connect('mongodb://localhost/weathertest2');
mongoose.Promise = global.Promise;


//create weather schema
const WeatherSchema = new Schema({
    location:{
        type: String
    },
    temperature:{
        type: String
    },
    observationTime:{
        type: String
    }

});

const Weather = mongoose.model('weather', WeatherSchema);

// post request
app.post('/new', function(req, res){
    new Weather({
        location    : req.body.location,
        temperature: req.body.temperature,
        observationTime   : req.body.observationTime                
    }).save(function(err, doc){
        if(err) res.json(err);
        else    res.send('Successfully inserted!');
    });
});
 

// listen for request
app.listen(process.env.port || 9000, function(){
    console.log('now listening for  testing request');
});
app.use(express.static('public'));

Respostas

3 PascalLamers Sep 22 2020 at 16:27

Tente usar o body-parsermiddleware junto com o express:https://www.npmjs.com/package/body-parser

const bodyParser = require("body-parser");

/* 
* Parses the text as URL encoded data (which is how browsers tend to send
* form data from regular forms set to POST) and
* exposes the resulting object (containing the keys and values) on req.body
*/

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

Desta forma, os dados do formulário devem ser incluídos na solicitação body( req.body.location)

elemetrics Sep 22 2020 at 16:31

Parece que o corpo da solicitação está indefinido. Isso pode ocorrer porque o Express não está analisando o corpo da solicitação corretamente. A solução provavelmente é usar um analisador de corpo.

npm install --save body-parser

Em seguida, importe o analisador de corpo para o seu arquivo:

const bodyParser = require('body-parser')

Em seguida, coloque esta linha antes do manipulador "/ new":

app.use(bodyParser)