2017-02-28 89 views
0

我想要在散列他的電子郵件後添加用戶到數據庫中。我創建了以下貓鼬模型。但是,我不斷收到TypeError:keyStore.createUser不是一個函數。節點js貓鼬類型錯誤

const bcrypt = require('bcrypt-nodejs'); 
    const crypto = require('crypto'); 
    const mongoose = require('mongoose'); 

    const KeyStoreSchema = new mongoose.Schema({ 
     email: { type: String, unique: true }, 
     key: String, 
     endTime: Date 
     }); 

    module.exports.createUser = function (email, callback) { 
     bcrypt.genSalt(10, function (err, salt) { 
      bcrypt.hash(newUser.email, salt, function (err, hash) { 
       newUser.email = email; 
       newUser.key = hash; 
       var myDate = new Date("2 dec 2012 3:30:00"); // your date object 
       console.log('Created key for user'+ newUser.email +'at time:'+myDate); 
       // add 24 hours to the key 
       myDate.setHours(myDate.getHours() + 24) 
       newUser.endTime = myDate; 
       newUser.save(callback); 
      }); 
     }); 
    } 

    module.exports.getUserByUsername = function (email, callback) { 
     var query = { email: username }; 
     KeyStore.findOne(query, callback); 
    } 

    module.exports.getUserkey = function (email, callback) { 
     var query = { email:username } 
     KeyStore.findOne(query, 'key', callback); 
    } 

    const KeyStore = mongoose.model('KeyStore', KeyStoreSchema); 

    module.exports = KeyStore; 

回答

-1

終於可以解決了!這裏是我做的修改讓它工作..

const bcrypt = require('bcrypt-nodejs'); 
    const crypto = require('crypto'); 
    const mongoose = require('mongoose'); 

    const KeyStoreSchema = new mongoose.Schema({ 
     email: { type: String, unique: true }, 
     key: String, 
     endTime: Date 
     }); 

    KeyStoreSchema.methods.createUser = function createUser(email, callback) { 
     bcrypt.genSalt(10, function (err, salt) { 
      bcrypt.hash(newUser.email, salt, function (err, hash) { 
       newUser.email = email; 
       newUser.key = hash; 
       var myDate = new Date("2 dec 2012 3:30:00"); // your date object 
       console.log('Created key for user'+ newUser.email +'at time:'+myDate); 
       // add 24 hours to the key 
       myDate.setHours(myDate.getHours() + 24) 
       newUser.endTime = myDate; 
       newUser.save(callback); 
      }); 
     }); 
    }; 

    KeyStoreSchema.methods.getUserByUsername = function getUserByUsername(email, callback) { 
     var query = { email: username }; 
     KeyStore.findOne(query, callback); 
    }; 

    KeyStoreSchema.methods.getUserKey = function getUserKey(email, callback)  { 
     var query = { email:username } 
     KeyStore.findOne(query, 'key', callback); 
    }; 

    const KeyStore = mongoose.model('KeyStore', KeyStoreSchema); 

    module.exports = KeyStore; 
1

所以,你不能返回幾個「module.exports」。 Module.exports只能用於一次,並且這將是您在需要JavaScript文件時返回的內容。所以,實際返回的是最後分配的東西:
const KeyStore = mongoose.model('KeyStore',KeyStoreSchema);

你有2種選擇:

選項1:使用出口,並沒有在所有申報module.exports:

exports.createUser = function(){ 
    //logic 
} 

exports.getUserByUserName(){ 
    //logic 
} 

exports.getUserkey = function() { 
    //logic 
} 

... 

選項2:定義一個獨立的結構,並返回從模塊。出口:

var x = {}; 

x.createUser = function(){ 
    //logic 
} 

x.getUserByUserName = function(){ 
    //logic 
} 

x.getUserkey = function(){ 
    //logic 
} 

... 

module.exports = x; 
+0

對不起。正在忙着調試,直到我能解決問題纔看到您的答案。謝謝您的幫助! – nemesis94