salvare i dati su mongodb usando nodejs
Sto imparando da solo nodeJS, ora ho provato a inserire dati in MongoDB e questo è il mio obiettivo
inserisci i valori qui e una volta cliccato il pulsante di invio, i dati dovrebbero essere salvati correttamente su mongodb e questo dovrebbe restituire un messaggio di successo.
Ma questo è l'errore
TypeError: Cannot read property 'location' of undefined
Ecco gli snippet di codice
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'));
Risposte
Prova a utilizzare il body-parsermiddleware insieme a 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 }));
In questo modo i dati del modulo dovrebbero essere inclusi nella richiesta body( req.body.location)
Sembra che il corpo della richiesta sia indefinito. Ciò potrebbe essere dovuto al fatto che express non sta analizzando correttamente il corpo della richiesta. La soluzione è probabilmente quella di utilizzare un analizzatore del corpo.
npm install --save body-parser
Quindi importa body-parser nel tuo file:
const bodyParser = require('body-parser')
Quindi inserisci questa riga prima del gestore "/ new":
app.use(bodyParser)