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