2017-06-18 6 views
0

私は以下のスキーマを持っています。新しいuserを登録しようとすると、mongodbは最後に登録されたユーザの名前を新しいものに置き換えます。 ObjectIdはそのエントリにとどまります。なぜそれがそれをやっているのか分かりません。エラーはありません。エクスプレスマングースモンゴブが正しく挿入されない

I console.logポスト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

私は、新しいユーザーを作成し、保存するための正しい方法だとは思いません。ユーザーモデルをインスタンス化し、パラメータとしてオブジェクトを渡すことによって、新しいユーザーを作成します。私が何を意味するかを見るには、以下の私の解決策を参照してください。

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

関連する問題