Простой console.log с выводом файла и номера строки в Node.js
Пока кодю на Node.js нужно постоянно что-то выводить в консоль. Например, ошибки. Но для большей информативности удобнее знать, где именно ошибка выводится. Тем более, что пока кодил под iOS такой удобный макрос всегда был под рукой, а с Node.js пришлось погуглить и поковыряться, т.к. многие примеры со Stack Overflow просто падали на последней версии Node.js 5.10.0. Падали из-за использования в них Error.captureStackTrace(err, arguments.callee), а сейчас уже нужно использовать NFE.
В итоге сделал то, что хотел. Оставлю тут как шпаргалку.
npm install colors --save
Файл logger.js:
'use strict';
let colors = require('colors');
colors.enabled = true;
exports.p = function logger(somethingForPrint) {
somethingForPrint = somethingForPrint || '';
const originalPrepareStackTrace = Error.prepareStackTrace;
Error.prepareStackTrace = (error, stack) => { return stack; };
let e = new Error;
Error.captureStackTrace(e, logger);
const stack = e.stack;
const filename = stack[0].getFileName().split('/').reverse()[0];
const trace = filename + ':' + stack[0].getLineNumber() + " " + colors.bold.black('%s') + "\n";
Error.prepareStackTrace = originalPrepareStackTrace;
console.log(trace, somethingForPrint);
};
Использовать:
const logger = require('../utils/logger');
logger.p('something happened');
// file.js:401 something happened
comment
comments
Впечатления от Assassin's Creed IV Black Flag
Пару недель назад прошёл 4-ю часть.
comment commentsВосстановление слетевшего загрузчика GRUB на Hetzner
Второй раз за 2-3 года уже сталкиваюсь с тем, что на Hetzner на одном сервака слетает GRUB. Как следствие, после ребута сервер недоступен. Приходится идти в панель управления, в разделе Rescue включать загрузку с образа восстановления, цепляться к нему по SSH и восстанавливать загрузчик. Искать каждый раз инфу не классно, коротко после того, как подключились по ssh к системе восстановления, вводим в консоли:
mount /dev/md3 /mnt
chroot-prepare /mnt
chroot /mnt
mount -a
apt-get install grub2
grub-install /dev/sda
update-grub
exit
reboot now
comment
comments
Тестирование REST API с помощью Jasmine
Ещё одна шпаргалка. Пока писал API для проекта, захотелось написать какие-то тесты, чтобы быть уверенным, что API работает правильно. Такое тестирование снаружи, которым можно покрыть и чужое API. Например, если кто-то другой тебе пишет и ты хочешь быть уверенным, что после внесения каких-то правок у него ничего не сломалось. Хотя, конечно, такое тестирование должен делать тот, кто пишет API. Тем не менее.
Для тестов решил использовать Node.js и framework для тестирования Jasmine. Попутно прикрутил Gulp, чтобы в нём прогонять код через ESLint на предмет каких-то косяков и запускать тесты.
npm init
npm install gulp -g
npm install jasmine -g
npm install request --save
jasmine init
Остальное на гитхабе: Пример-заготовка на Github.
comment commentsБот для Telegram App Store Release Informer
Вынашивал тут идейку и наконец воплотил. У Apple есть REST API для поиска в iTunes. Я сделал бота для Telegram, который позволяет подписываться на обновления приложений. Когда выходит новая версия - он пишет тебе об этом в Telegram будь то личный чат или групповой. Будем теперь на работе оперативно все узнавать, когда новые версии наших приложений выходят в App Store.
Писал на Node.js как умею. Главное - работает. Хотел сделать и для андроидщиков, но, оказывается, у Google Play нет API. Совсем O_O.
Попробовать бота: https://telegram.me/ReleaseInformerBot (при старте просто набрать /help)
Если кто-то захочет что-то дописать исходники на Github: https://github.com/makoni/ReleaseInformerBot
Правда, кроме Node.js там используется как база данный мой любимый CouchDB. Но, чтобы запустить его на Mac, просто качаешь бинарник и готово (ну, и БД + виды надо создать).
comment commentsВпечатления от Assassin's Creed III
Продолжаю проходить игры из серии Assassin's Creed и записывать впечатления.
comment comments