2017-02-28 1 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);

옵션 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