Unten ist ein Objektliteral, das ich versuche, in MongoDB zu speichern. Es ist in der Datei app.js definiert, die ein Express-Server ist. Da das Objekt innerhalb des Servers fest codiert ist, ging ich davon aus, dass bei jedem Serverstart eine neue Kopie in der DB gespeichert wird, oder dass das Dokument mindestens einmal gespeichert und bei der Erkennung überschrieben wird Das neue Dokument ist identisch mit dem, das beim letzten Serverlauf gespeichert wurde. Zu meinem Erstaunen werden in der MongoDB nicht nur keine Kopien erstellt, sondern das Dokument wird überhaupt nicht gespeichert. Es wurde jedoch die "Nachrichten" -Sammlung erstellt, die mit "shown collections" von mongo shell verifiziert wurde. Auch bekomme ich keinen Fehler in der Callback-Funktion. Ich habe auch versucht, die Model.create (doc, fn) innerhalb meiner Express '/ Nachrichten' Route, aber das funktioniert auch nicht (das Dokument sollte jedes Mal gespeichert werden, wenn die '/ Nachrichten' Route vom Client aufgerufen wird, aber es ist nicht). Was vermisse ich?
Bitte lesen Sie meine Anmerkungen mit "< -", um zu sehen, welche anderen Probleme oder unerwartetes Verhalten ich treffe. Ich wäre Ihnen sehr dankbar, wenn Sie diese auch in Ihrer Antwort ansprechen könnten.Mongoose speichert keine Daten in die MongoDB
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, fs = require('fs');
// Defining connection to the database:
var mongoose = require('mongoose').
connect("mongodb://localhost:27017/my-test-db"),
db = mongoose.connection;
var Schema = mongoose.Schema;
var ObjectID = Schema.ObjectId;
// Setting up the debug flag:
mongoose.set('debug, true');
// Logging connection:
db
.on('error', console.error.bind(console, 'DB connection error.'))
.once('open', console.log.bind(console, 'DB Connection established.'));
// Defining MongoDB schemas:
var usr = new Schema({
first: String,
last: String
});
var newsSchema = new Schema({
headline: String,
bd: String,
imgURI: String,
imgThumbURI: String,
imgCaption: String,
addedOn: Date,
addedBy: {
type: ObjectID,
ref: 'usr'
}
// On user action 'save' populate the addedOn and addedBy fields before the news article is actually saved to the DB:
newsSchema.pre('save', function(next){
if(!this.addedOn) this.addedOn = new Date();
if(!this.addedBy) this.addedBy = {first: "admin", last: "admin"};
});
// Indexing important fields:
usr.index({last: 1});
newsSchema.index({headline: 1});
//Adding the News model:
var News = mongoose.model('news', newsSchema);
var nws1 = new News({
headline: "Test news Headline",
bd: "Test news body. Test news body. Test news body. Test news body. Test news body. ",
imgURI: encodeURI("images/news/img.jpg"),
imgThumbURI: encodeURI("images/news/thumbs/img.jpg"),
imgCaption: "Test news image caption.",
addedOn: new Date(),
addedBy: {first: "Admin", last: "Admin"}
});
nws1.save(function(err, news){
if(err) return console.error("Error while saving data to MongoDB: " + err); // <- this gets executed when there's an error
console.error(news); // <- this never gets logged, even if there's no error.
});
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.resolve(__dirname + '/public'));
app.set('view engine', 'html')
.engine('html', function(path, options, fn){
if('finction' == typeof options){
fn = options, options = {};
}
fs.readFile(path, 'utf8', fn);
});
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session());
app.use(express.static(path.join(__dirname, 'public')));
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
Vielen Dank für Ihre Zeit
Mit freundlichen Grüßen
Jared
Rufst du 'mongoose.connect' in der Datenbank zu verbinden irgendwo außerhalb dieses Codes? – JohnnyHK
@JohnnyHK Ja, bin ich. Bitte, sehen Sie sich die aktualisierte Frage an. Ich habe den entsprechenden Code eingefügt. –