2017-02-28 110 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