2015-08-18 14 views
0

因此,試圖創建一個簡單的模塊來整理網頁的帳戶,並認爲它很簡單。用一些函數創建一個文件,將它們全部包裝在一個模塊中。導出並且啃你的叔叔。那麼,鮑勃不是我的叔叔。爲平均應用程序創建導出模塊

所以創建以下文件:

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); 
     }); 
    }); 

或確實

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呢,讓你在一個匿名函數滑動的API本身。

回答

0

您將一個匿名函數附加到module.exports,因此initAccountundefined

使用匿名函數:

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不是使用exports.initAccount函數的函數。 – vrghost

相關問題