2017-06-18 84 views
0

我有以下模式。当我尝试注册一个新的user时,mongodb用最新注册的用户名替换最后注册的用户名。对于该条目,ObjectId保持不变。不知道为什么这样做。没有错误。表格mongoose Mongodb没有正确插入

我ed在后处理api处处可见,一切都很好。该条目在数据库中可见,但已取代后者。这个问题可以是我的模式设计吗?有些东西告诉我,这是我在模式定义中制作所有String的方式。我正在用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'看起来非常可疑。实例在哪里创建?这当然不在'.post()'的范围内。某处你正在调用'var user = new User()',那个实例就在附近。所以相同的信息就像你所描述的一样。显示代码,包括您实际进行该呼叫的位置。但是,你真的应该简单地在这个范围内调用'new User()'。 –

+0

我已经添加了代码。我在顶部调用'var user = new User()'。 –

+2

所以不要那样做。在'.post()'和同一个模块中的其他请求方法中调用'new User()'“。这不像“进口”。你正在声明一个变量,并且范围很重要。所以你需要一个“新”的每一个请求。那么你不会有这个问题。 –

回答

1

我不认为这是创建并保存新的用户以正确的方式。您通过实例化User模型并将对象作为参数传递给它来创建新用户。要了解我的意思,请参阅下面的解决方案。

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