2015-08-18 2 views
0

Итак, пытаясь создать простой модуль для сортировки учетных записей для веб-страницы, и подумал, что это будет просто. Создайте файл с некоторыми функциями, оберните его все в module.exports и заманивайте своего дядю. Ну, оказывается, бобы не мой дядя.Создание модуля экспорта для среднего приложения

Так создал следующий файл:

module.exports = function(lameAccount) { 
    lameAccount.initAccount(function (myId, myName, done) { 
     console.log("Will create" + myId); 
     console.log("Name is " + myName); 
     done(null,false,"This is just a hello"); 

    }) 
} 

И в той части, которая нуждается в ней (API-интерфейс маршрутизатора)

var lameAccountant     = require('../modules/lameaccount.js') 

И затем вызвать нашу функцию

lameAccount.initAccount(blockRecord._id, blockRecord.betName) 

Однако, когда я пытаюсь использовать эту функциональность, я получаю

/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/node_modules/mpromise/lib/promise.js:108 
    if (this.ended && !this.hasRejectListeners()) throw reason; 
                ^
TypeError: undefined is not a function 
    at EventEmitter.<anonymous> (/Users/bengtbjorkberg/WebstormProjects/Challange/routes/api.js:119:22) 
    at EventEmitter.<anonymous> (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/node_modules/mpromise/lib/promise.js:175:45) 
    at EventEmitter.emit (events.js:110:17) 
    at Promise.safeEmit (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/node_modules/mpromise/lib/promise.js:81:21) 
    at Promise.fulfill (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/node_modules/mpromise/lib/promise.js:94:24) 
    at Promise.resolve (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/lib/promise.js:113:23) 
    at model.<anonymous> (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/lib/document.js:1578:39) 
    at next_ (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/node_modules/hooks-fixed/hooks.js:89:34) 
    at EventEmitter.fnWrapper (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/node_modules/hooks-fixed/hooks.js:186:8) 
    at EventEmitter.<anonymous> (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/node_modules/mpromise/lib/promise.js:175:45) 
    at EventEmitter.emit (events.js:110:17) 
    at Promise.safeEmit (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/node_modules/mpromise/lib/promise.js:81:21) 
    at Promise.fulfill (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/node_modules/mpromise/lib/promise.js:94:24) 
    at p1.then.then.self.isNew (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/lib/model.js:260:27) 
    at newTickHandler (/Users/bengtbjorkberg/WebstormProjects/Challange/node_modules/mongoose/node_modules/mpromise/lib/promise.js:229:18) 
    at process._tickCallback (node.js:355:11) 

============== Редактировать относительно первого ответа ============

Так что, если это анонимная функция (определенная это я, почему эта работа)

// expose this function to our app using module.exports 
module.exports = function(passport) { 

    // ========================================================================= 
    // passport session setup ================================================== 
    // ========================================================================= 
    // required for persistent login sessions 
    // passport needs ability to serialize and unserialize users out of session 

    // used to serialize the user for the session 
    passport.serializeUser(function(user, done) { 
     done(null, user.id); 
    }); 

    // used to deserialize the user 
    passport.deserializeUser(function(id, done) { 
     User.findById(id, function(err, user) { 
      done(err, user); 
     }); 
    }); 

или даже сами APIs

module.exports = function(app, passport) { 

    var urlencodedParser = bodyParser.urlencoded({ extended: false }) 
    // parse application/json 
    app.use(bodyParser.json()) 


    app.get('/api/userList', function(req, res){ 
     User.find({}, {'_id':1, 'userName':1},function(err, users) { 
      if (err) 
      res.send(err) 

      res.json(users); 
     }) 
    }); 

это то, что делает app.use, позволяют скользить в анонимной функции.

ответ

0

Вы прикрепляете анонимную функцию к module.exports, поэтому initAccount является undefined.

использования, что анонимная функция:

var lameAccountantModule = require('../modules/lameaccount.js') 

// call the function like you would the anonymous function 
lameAccountModule(lameAccount) 

Или выставить тот, который вы хотите, initAccount, вместо:

exports.initAccount = function (myId, myName, done) { 
     console.log("Will create" + myId); 
     console.log("Name is " + myName); 
     done(null,false,"This is just a hello"); 
} 

Затем в другом файле:

var lameAccount = require('../modules/lameaccount.js') 
lameAccount.initAccount(myId, myName, callback) 
+0

Будет ли ухода downvoter комментировать? – agconti

+0

Я предполагаю, что вы хотели проголосовать за мой вопрос, а не за вопрос. Помимо этого, ваш ответ имеет смысл, но почему тогда работает паспортный модуль? (добавлено в качестве редактирования) – vrghost

+0

Пробовал, и он не работал, он все еще утверждает, что undefined не является функцией, использующей функцию export.initAccount. – vrghost

Смежные вопросы