Синопсис
В этой статье собраны полезные для новичков советы по использованию различных возможностей 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.
Автор: