Mit dieser einfachen Node.js Express-API habe ich ein seltsames Problem festgestellt: Ich erstelle ein Modell, füge Daten ein und speichere es in meiner MongoDB. Aber der Datensatz wird nie gespeichert, aber ich bekomme auch keinen Fehler. Ich habe überprüft, ob MongoDB läuft und sowohl syslog für Knotenfehler und mongod.log für MongoDB-Fehler als auch meine eigene Wilson debug.log-Datei. Alle enthalten keine Fehler.Node.js Mongoose-Modell speichert nicht ohne Fehler
Ich benutze Postman, um die API zu testen und bekomme jedes Mal eine Antwort. Es ist nur so, dass die Daten nicht in MongoDB gespeichert werden (Ich habe die Mongo-Konsole mit db.collection.find() verwendet, um nach eingefügten Datensätzen zu suchen).
Eine Idee, warum das passieren könnte?
mein Code:
api.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var http = require('http');
var https = require('https');
var fs = require('fs');
var winston = require('winston');
// Configure logging using Winston
winston.add(winston.transports.File, { filename: '/home/app/api/debug.log' });
winston.level = 'debug';
// Request body parser
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
// Enable https
var privateKey = fs.readFileSync('path to private key');
var certificate = fs.readFileSync('path to cert file');
var credentials = {
key: privateKey,
cert: certificate
};
// ROUTERS
var router = express.Router();
var speciesRouter = require('./app/routes/speciesRouter');
router.use('/species', speciesRouter);
// Routes prefix
app.use('/api/v1', router);
// SERVER STARTUP
http.createServer(app).listen(3000);
https.createServer(credentials, app).listen(3001);
speciesRouter.js
var express = require('express');
var mongoose = require('mongoose');
var router = express.Router();
var Sighting = require('../models/sighting');
var winston = require('winston');
// Database connection
var dbName = 'dbname';
mongoose.connect('mongodb://localhost:27017/' + dbName);
var db = mongoose.connection;
db.on('error', function(err){
winston.log('debug', err);
});
router.route('/')
.post(function(req, res) {
var sighting = new Sighting();
sighting.user_key = req.body.user_key;
sighting.expertise = req.body.expertise;
sighting.phone_location = req.body.phone_location;
sighting.record_time = req.body.record_time;
sighting.audio_file_location = '/var/data/tjirp1244123.wav';
sighting.probable_species = [{species_name:'Bosaap', percentage:100}];
var error = '';
winston.log('debug', 'test');
// This does not get execute I suspect..
sighting.save(function(err) {
winston.log('debug', 'save');
if (err) {
winston.log('debug', err);
error = err;
}
});
res.json({
probable_species: probable_species,
expertise: req.body.expertise,
error: error
});
});
module.exports = router;
sighting.js (Modell)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var SightingSchema = new Schema({
user_key: String,
expertise: Number,
phone_location: { lat: Number, lng: Number },
record_time: Number,
audio_file_location: String,
probable_species: [{ species_name: String, percentage: Number }]
});
module.exports = mongoose.model('Sighting', SightingSchema);
winston.log ('debug', 'speichern'); das druckt etwas? –
Dies bringt es in meine benutzerdefinierte Protokolldatei, ja. Diese Linie wird nie erreicht, jedoch wird ein anderes Winston-Protokoll erstellt, bevor die sighting.save() -Zeile erreicht wird. –
Ich überprüft db.calculations.find() sowie db.stignings.count(). das erste war leer, das zweite gab 0 zurück. –