Speichern von Daten in Mongodb mit NodeJS

Sep 22 2020

Ich bin selbstlernender NodeJS. Jetzt habe ich versucht, Daten in MongoDB einzufügen und dies ist mein Ziel

Geben Sie hier Werte ein, und sobald Sie auf die Schaltfläche "Senden" klicken, sollten Sie die Daten erfolgreich in Mongodb speichern und eine erfolgreiche Nachricht zurückgeben.

Aber das ist der Fehler

TypeError: Cannot read property 'location' of undefined

Hier sind die Codefragmente

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'));

Antworten

3 PascalLamers Sep 22 2020 at 16:27

Versuchen Sie, die body-parserMiddleware zusammen mit Express zu verwenden: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 }));

Auf diese Weise sollten die Daten aus dem Formular in die Anfrage aufgenommen werden body( req.body.location)

elemetrics Sep 22 2020 at 16:31

Es scheint, dass der Hauptteil der Anfrage undefiniert ist. Dies kann daran liegen, dass Express den Anforderungshauptteil nicht korrekt analysiert. Die Lösung besteht wahrscheinlich darin, einen Body-Parser zu verwenden.

npm install --save body-parser

Importieren Sie dann den Body-Parser in Ihre Datei:

const bodyParser = require('body-parser')

Stellen Sie dann diese Zeile vor den "/ new" -Handler:

app.use(bodyParser)