Pull to refresh

Особенности использования Sails для начинающих (Часть 2)

Reading time3 min
Views9K


Синопсис


В этой статье собраны полезные для новичков советы по использованию различных возможностей MVC фреймворка SailsJS. Эти советы могут быть полезны новичкам тем, что открывают некоторые «секреты» которые могут им быть незнакомы — из-за этого многие пишут множество костылей и велосипедов, это может заставить погаснуть их энтузиазм в изучении этого полезного инструмента только потому что их основные силы будут направлены на обычную рутину которую можно запросто обойти с помощью простых и удобных методов. Интересно?




Выгрузка файлов на сервер в SailsJS


В Sails с версии 0.10 по-умолчанию встроена новая удобная опция — выгрузки файлов на сервер с помощью простых и удобных средств, привычных каждому, кто хоть раз пользовался этим фреймворком. Мы все привыкли — что принять данные запроса GET или POST можно просто использовав метод запроса param()
var page = req.param('page'); // атрибут 'page' принимает значения переданного запроса

Но у этого метода есть изъян — он принимает лишь строку. А нам необходимо работать с файлами, что же можно сделать? Для этого в Sails есть метод запроса file()
req.file('file'); // атрибут file - значение файлового запроса

Далее в обработку вступает созданная командой Sails библиотека Skipper (Шкипер), которая имеет простое и легко запонимающееся API. Сейчас приведу код простого контроллера, а потом подробнее опишу как использовать API.
module.exports = {
  index: function (req,res){
  	res.view();
  },
  upload: function  (req, res) {
    req.file('file').upload({
    	dirname: 'uploads/',
    },function (err, files) {
      if (err)
        return res.serverError(err);

      return res.json({
        message: files.length + ' Выгрузка файл(ов) завершена!',
        files: files
      });
    });
  }
};

Индексный атрибут — простое отображение страницы. Дальше выгрузка — которая запрашивает файл(ы), отправляемые запросом. Метод upload() принимает 2 агрумента — объект опций, и коллбек функция с данными — ошибка, и файлы. В нашем случае после загрузки на сервер нам отвечают json с данным о количестве и размере файлов. Отправляются файлы как запросом из формы, так и как AJAX — но с указанием необходимой мета-информации. В простейшем виде представление формы выглядит так:
<form action="/file/upload" enctype="multipart/form-data" method="post">
<input type="file" name="avatar" multiple="multiple"><br>
<input type="submit" value="Загрузить">
</form>


Опции

В объекте опций который мы передали может содержать 2 значения:

dirname (Строка)

Путь к папке куда загружать файлы. (по-умолчанию это ".tmp/uploads)

saveAs (колбек)

Функция для определения логики формирования имен загружаемых файлов, в ином случае если не указано — когда появляется файл с именем идентичным старому: файл перезаписывается. Базовый аргумент — объект file. Функция должна возвращать имя файла. Пример:
function (file) {
	return Math.random() + file.name;
}


Дополнительно

Также кроме этого в качестве метода для гибкости можно использовать дополнительные возможности:
req.file('file')
// Если Ошибка
.on('error', function onError() { ... })
// Если Успешно выполнено
.on('finish', function onSuccess() { ... })
// Параметры
.pipe(receiving)


Страница библиотеки Skipper на GitHub.



Sails.log — логирование в sails


Когда при разработке нужно обозначить какие-либо моменты в консоли — стандартная команда console.log() будет не так эффективна как sails.log — встроенная в sails система ведения логов в консоли. Это небольшие «сахарные» возможности которые позволяют выделять цветом ваши сообщения в консоли — и к какому виду сообщений они принадлежат. Это полезно когда выполняется множество логируемых действий — и непонятно какое из них к чему принадлежит: К ошибке или информационному сообщению, а может вообще просто как пустая информация. Для sails.log есть 6 методов определения. Вот они:
sails.log.error('Ошибка'); // Выводит сообщение отмеченное красным как error:
sails.log.warn('Предупреждение'); // Выводит сообщение отмеченное желтым как warn:
sails.log.debug('Отладочное сообщение'); // Выводит сообщение отмеченное синим как debug:
sails.log.info('Информация'); // Выводит сообщение отмеченное зеленым как info:

// Низко приоритетные уровни журнала:
sails.log.verbose('Подробное описание'); // Подробное описание чего либо (маловажная информация)
sails.log.silly('Бесполезная информация '); // Абсолютно не нужное в логах


В заключение


На этом завершим вторую часть нашего экскурса в возможности Sails, и их практическом использовании. В следующей статье будут рассмотрены такие вопросы как «Unit тестирование частей приложения Sails с помощью Mocha» и другие полезные моменты использования фреймворка SailsJS.
Tags:
Hubs:
Total votes 8: ↑6 and ↓2+4
Comments10

Articles