2017-06-18 3 views
0

Ich habe die folgenden Schemas. Wenn ich versuche, einen neuen user zu registrieren, ersetzt mongodb den Namen des letzten registrierten Benutzers durch den neuen. ObjectId bleibt für diesen Eintrag gleich. Hab keine Ahnung, warum das so ist. Keine Fehler.express mongoose Mongodb nicht richtig einstecken

I console.log ed überall in der Post api und alles ist gut. Der Eintrag wird in der Datenbank angezeigt, ersetzt diesen jedoch. Könnte das Problem mein Schemadesign sein? Etwas sagt mir, dass es so ist, wie ich in den Schemadefinitionen alles String mache. Ich baue mit MEAN.

var AnswerSchema = Schema({ 
    response : { type: String, default:null}, 
    question : { type: String, ref: 'Question'}, 
    employee : { type: String, ref: 'User'} 
}) 

var QuestionSchema = Schema({ 
    title : String, 
}); 

var UserSchema = Schema({ 
    username : String, 
}); 

module.exports = mongoose.model('Answer', AnswerSchema); 
module.exports = mongoose.model('Question', QuestionSchema); 
module.exports = mongoose.model('User', UserSchema); 

api

var Question = require('../models/questions'); 
var User = require('../models/users'); 
var Answer = require('../models/answers'); 
var jwt = require('jsonwebtoken'); 
var secret = "markov"; 
var user = new User(); 
var question = new Question(); 
var answer = new Answer(); 

// Export routes to the main server.js file 
module.exports = function(router) { 
    /* ==================== 
    User Registration Route 
    ==================== */ 
    router.post('/users', function(req, res) { 
     user.username = req.body.username; 

     if (req.body.username == null) { 
      res.json({ success: false, message: 'Ensure username is provided' }); 
     } else { 
      // If criteria is met, save user to database 
      user.save(function(err) { 
       console.log(user.username); 
       if (err) { 
        res.json({ success: false, message: 'Username already exists!' }); 
       } else { 
        res.json({ success: true, message: 'user created!' }); // If all criteria met, save user 
       } 
      }); 
     } 
    }); 
+1

'user.username' sieht sehr verdächtig. Wo wird die Instanz erstellt? Es ist sicherlich nicht im Bereich der '.post()' hier. Irgendwo rufen Sie 'var user = new User()' und diese Instanz bleibt herum. Die Informationen bleiben also genau so, wie du es beschreibst. Zeigen Sie den Code an, wo Sie den Anruf tatsächlich tätigen. Aber eigentlich solltest du einfach 'new User()' in diesem Bereich aufrufen. –

+0

Ich habe den Code hinzugefügt. Ich rufe 'var user = new User()' oben auf. –

+2

Also tu das nicht. Rufen Sie 'new User()' "innerhalb" der '.post()' und alle anderen Request-Methoden im selben Modul auf. Dies ist nicht wie "Importe". Sie deklarieren eine Variable und der Umfang ist wichtig. Sie wollen also ein "neues" mit jeder Anfrage. Dann wirst du das Problem nicht haben. –

Antwort

1

Ich glaube nicht, dass der richtige Weg ist, neue Benutzer zu erstellen und zu speichern. Sie erstellen einen neuen Benutzer, indem Sie das Benutzermodell instanziieren und ihm ein Objekt als Parameter übergeben. Um zu sehen, was ich meine, siehe meine Lösung unten.

var Question = require('../models/questions'); 
 
var User = require('../models/users'); 
 
var Answer = require('../models/answers'); 
 
var jwt = require('jsonwebtoken'); 
 
var secret = "markov"; 
 
// you don't define new User model here! 
 
// var user = new User(); 
 
var question = new Question(); 
 
var answer = new Answer(); 
 

 
// Export routes to the main server.js file 
 
module.exports = function(router) { 
 
    /* ==================== 
 
    User Registration Route 
 
    ==================== */ 
 
    router.post('/users', function(req, res) { 
 

 
     if (req.body.username == null) { 
 
      res.json({ success: false, message: 'Ensure username is provided' }); 
 
     } else { 
 
      // If criteria is met, save user to database 
 
      // create new user 
 
      var newUser = new User({ username: req.body.username }); 
 
      newUser.save(function(err) { 
 
       console.log(user.username); 
 
       if (err) { 
 
        res.json({ success: false, message: 'Username already exists!' }); 
 
       } else { 
 
        res.json({ success: true, message: 'user created!' }); // If all criteria met, save user 
 
       } 
 
      }); 
 
     } 
 
    });