guardar datos en mongodb usando nodejs

Sep 22 2020

Soy de autoaprendizaje nodeJS, ahora intenté insertar datos en MongoDB y este es mi objetivo

inserte valores aquí y una vez que se haga clic en el botón enviar, debería guardar los datos correctamente en mongodb y esto debería devolver un mensaje correcto.

Pero este es el error

TypeError: Cannot read property 'location' of undefined

Aquí están los fragmentos 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'));

Respuestas

3 PascalLamers Sep 22 2020 at 16:27

Intente usar el body-parsermiddleware junto con 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 }));

De esta forma los datos del formulario deben incluirse en la solicitud body( req.body.location)

elemetrics Sep 22 2020 at 16:31

Parece que el cuerpo de la solicitud no está definido. Esto puede deberse a que Express no analiza el cuerpo de la solicitud correctamente. Probablemente la solución sea utilizar un analizador corporal.

npm install --save body-parser

Luego importe body-parser en su archivo:

const bodyParser = require('body-parser')

Luego, coloque esta línea antes del controlador "/ new":

app.use(bodyParser)