2017-09-04 90 views
0

我正在使用nodejs中的api路由通過貓鼬將用戶添加到數據庫。標準的東西。但是,它可以與一個用戶完美協作。然後,當我嘗試創建另一個用戶時,新用戶已登錄但未保存到數據庫。nodejs只能夠在數據庫中創建一個用戶

任何幫助表示讚賞。這裏是路由代碼:

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

您是否在第二次和其他呼叫中使用了「{token:'token-value'}」的響應? – alexmac

+0

@alexmac是的。我檢查了每一次,新的令牌也總是有正確的負載。 –

+0

嘗試檢查'newUser.save'回調中的'err'對象,可能是驗證等錯誤。 – alexmac

回答

1

原來這是用MLAB的問題。爲了修復它,我刪除了用戶集合並註冊了一個新用戶。在用戶集合再次生成後,我可以將新用戶添加到數據庫。

+1

以上的問題了!我真的在看一切,看看可能是什麼問題。 Upvoted! – turmuka

+0

@turmuka謝謝你,我非常感謝你的幫助! –

2

let允許你聲明瞭在範圍上不限於所述 塊,語句,或在其上使用的表達變量。這與 關鍵字var不同,後者在全局範圍內定義變量,或在本地定義整個函數,而與塊範圍無關。

let newUser = new User(); 

改變這

var newUser = new User(): 
+0

這不適合我。 –

+0

當你在'.save()'函數之前嘗試'console.log' newUser時,它說了什麼? @TerraNuva – turmuka

+0

它像我想要的那樣返回新的用戶對象。所以我猜這是.save函數之後的問題? {_id:59add388e980f8190779d71a, 地方: {密碼: '$ 2A $ 10 $ 4ofOQTjqT44lSOEMQO8nvuKKSu55u/KvEpvw4q4bZpiioPOF3NgBG', 名稱: '測試', 電子郵件: '[email protected]'}} –

相關問題