guardar datos en mongodb usando nodejs
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
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)
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)