Я пробовал модуль require
, который является самоисключительной функцией Javascript и передаёт ему параметр, когда I require
. «Обязательный» объект всегда говорит, что «объект не является функцией».Требуется модуль, который использует шаблон раскрывающего модуля
Возможно ли использовать следующий код, и если да, то где я ошибаюсь?
Модуль
var _ = require('lodash');
var userRepository = (function(userRecords) {
console.log(userRecords);
var findByUsername = function(username, cb) {
//find username in the userNameData
//this may have been retrieved from the DB or passed in as mock data from the tests
var user = _.find(userRecords, {
"email": username
});
if (user) {
return cb(null, user);
} else {
return cb(null, null);
}
};
return {
findByUserName: findByUsername
};
})();
module.exports = userRepository;
Использование в коде
var userData = require('../test/data/users.json'),
userRepository = require('../db/userRepository')(userData);
describe('User Repository', function() {
describe('Find by username', function() {
it('should return a user record for <user> if the username <username> is found', function() {
var username = "[email protected]";
var user = userRepository.findByUsername(username, function() {});
});
});
});
Заранее спасибо за любую помощь
Я бы хотел передать параметр 'require'. то есть я хочу передать 'userRecords' в (немного как инъекция зависимостей). Поэтому я могу сделать модуль более надежным. Можно ли сделать это? Спасибо –
Также, пожалуйста, не могли бы вы объяснить, что такое IIFE, спасибо –
@JonHunter Тогда не делайте его самоисполняемой функцией, экспортируйте функцию, которая возвращает этот объект.(Если вам нужно 'userRepository', чтобы он пришел из внешнего источника, вы не можете вызывать эту функцию внутри своего модуля, поэтому его не следует вызывать самостоятельно) [IIFE] (https://en.wikipedia.org/wiki/Immediately-invoked_function_expression) – doldt