2017-09-04 11 views
0

私はnodejsでapiルートを使用して、mongooseを使用してデータベースにユーザーを追加しています。標準的なもの。ただし、1人のユーザーと完全に連携します。次に、別のユーザーを作成しようとすると、新しいユーザーはログインしますが、データベースには保存されません。nodejsはデータベースに1人のユーザーしか作成できません

何か助けていただければ幸いです。ここでは、ルートコードは次のとおりです。

app.get('/register' , function(req , res) { 
    res.sendFile(path.join(__dirname , '../public' , 'register.html')); 
}); 
app.post('/api/register' , function(req, res) { 
    User.findOne({'local.email': req.body.email}, function(err, user) { 
     if(err) { 
      return res.json({ 
       'message': err 
      }); 
     } 
     if(user) { 
      return res.json({ 
       'message': 'User already exists' 
      }); 
     } else { 
      let newUser = new User(); 

      newUser.local.email = req.body.email; 
      newUser.local.name = req.body.name; 
      newUser.local.password = newUser.setPassword(req.body.password); 

      newUser.save(function(err) { 
       var token; 
       token = newUser.generateJwt(); 
       res.status(200); 
       res.json({ 
        'token': token 
       }); 
      }); 
     } 
    }); 
}); 

スキーマ:

const bcrypt = require('bcrypt-nodejs'); 
const jwt = require('jsonwebtoken'); 
const mongoose = require('mongoose'); 
let userSchema = new mongoose.Schema({ 
    local: { 
     email: String, 
     name: String, 
     password: String 
    } 
}); 
userSchema.methods.setPassword = function(password) { 
    return bcrypt.hashSync(password, bcrypt.genSaltSync(10), null); 
} 
userSchema.methods.validatePassword = function(password) { 
    return bcrypt.compareSync(password, this.local.password); 
} 
userSchema.methods.generateJwt = function() { 
    var expire = new Date(); 
    expire.setDate(expire.getDate() + 7); 

    return jwt.sign({ 
    _id: this._id, 
    email: this.local.email, 
    name: this.local.name, 
    exp: parseInt(expire.getTime()/1000), 
    }, process.env.CONFIG_SR); 
}; 
module.exports = mongoose.model('User' , userSchema); 
+0

2回目以降のコールで '{token: 'token-value'}'を返信しますか? – alexmac

+0

@alexmacはい。私は毎回チェックし、新しいトークンは常に正しいペイロードを持っています。 –

+0

'newUser.save'コールバックの' err'オブジェクトをチェックしてみてください。検証などで何らかのエラーが発生している可能性があります。 – alexmac

答えて

1

への変更これは、これがMLABの問題だったが判明。これを修正するために、ユーザーコレクションを削除して新しいユーザーを登録しました。ユーザーコレクションが再度生成された後、新しいユーザーをデータベースに追加できました。

+1

素晴らしい!私は本当に何が問題であったかを見るためにすべてを見ていました。アップアップされました! – turmuka

+0

@turmukaありがとう、私は本当に助けてくれてありがとう! –

2

letあなたはそれが使用されている ブロック、ステートメント、または式に範囲が限定されている変数を宣言することができます。これは、 varキーワードとは異なり、ブロックスコープに関係なく、変数全体をグローバルに、または 関数全体に対してローカルに定義します。

let newUser = new User(); 

var newUser = new User(): 
+0

これは私には役に立たなかった。 –

+0

'.save()'関数の前に 'console.log' newUserを実行しようとするとどうなるでしょうか? @TerraNuva – turmuka

+0

私は望むようにnewUserオブジェクトを返します。ですから、私はそれが.save関数の後の問題だと思います。 {_id:59add388e980f8190779d71a、 ローカル: {パスワード: '$ 2A $ 10 $ 4ofOQTjqT44lSOEMQO8nvuKKSu55u/KvEpvw4q4bZpiioPOF3NgBG'、 名: '試験'、 電子メール: '[email protected]'}} –

関連する問題