...

четверг, 7 ноября 2013 г.

Require целой папки

imageЗдравствуй, %username%! Разрабатывая проект на Node.js я столкнулся с невозможностью сделать require целой папки.

Допустим, у нас есть такое дерево каталогов:

Project

— handlers

— — admin.js

— — user.js

— — settings.js

— routes

— — admin.js

— — user.js

— — settings.js

— app.js


Как правило, если нам необходимо добавить новый handler, то мы создаем там файл, затем прописываем адрес к нему в require и радуемся, но иногда хочется иметь сразу все файлы в одном объекте (чтобы наш алгоритм сводился только лишь к созданию файла).



Для этого мы должны в каждой нужной папке создать файл index.js и поместить в него следующий код:



var curFile, curPath, dir, fs, path, result, value, _i, _len;

result = {};
fs = require('fs');
path = require('path');
curPath = path.dirname(__filename);
curFile = path.basename(__filename);
dir = fs.readdirSync(curPath);

for (_i = 0, _len = dir.length; _i < _len; _i++) {
value = dir[_i];
if (value !== curFile) {
result[value.split('.')[0]] = require(curPath + '/' + value);
}
}

module.exports = result;


И затем мы можем указать просто require('./routes') или require('./handlers') и получить объект, свойствами которого будут названия файлов в этой директории. Каждое свойство будет содержать require одноименного файла.


Почему я не сделал асинхронно?

Так как мне сразу по душе пришлась асинхронность, то я решил сделать асинхронных скрипт, но через некоторое время отказался от этой идеи, дабы не вешать еще один коллбек.


P.S: Метод не претендует на что-либо.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий