salvare i dati su mongodb usando nodejs

Sep 22 2020

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

3 PascalLamers Sep 22 2020 at 16:27

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)

elemetrics Sep 22 2020 at 16:31

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)