Итак, пытаясь создать простой модуль для сортировки учетных записей для веб-страницы, и подумал, что это будет просто. Создайте файл с некоторыми функциями, оберните его все в 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, позволяют скользить в анонимной функции.
Будет ли ухода downvoter комментировать? – agconti
Я предполагаю, что вы хотели проголосовать за мой вопрос, а не за вопрос. Помимо этого, ваш ответ имеет смысл, но почему тогда работает паспортный модуль? (добавлено в качестве редактирования) – vrghost
Пробовал, и он не работал, он все еще утверждает, что undefined не является функцией, использующей функцию export.initAccount. – vrghost