salvando dados para mongodb usando nodejs
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
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)
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)