Для меня javascript - хобби, поэтому не уверен, что уровня хватит для чего-то крупного, думаю помочь смогу только в небольших конкретных задачах. Если подходит - то моя почта aves.v@yandex.ru
Я и оговорил, что как в вопросе. Хотя если не добавлять минуты, то и так будет. Чтобы с минутами было, нужно в сравнении time и timeEnd выкинуть двоеточие с помощью replace. А если нужно, чтобы в результате было по одной записи на день, то перед reduce добавить sort()
Думаю, зависит от цели. В ноде еще интересны потоки, дочерние процессы. Я, например, делал конвертер кодировки на Transform Stream, и переборщик md5 хешей на всех ядрах процессора с помощью spawn. А в веб можно, например, парсер-агрегатор сайтов.
Можно в записи базы времени добавлять штамп времени при добавлении сообщения:
db.insert({msg: data, nick: socket.nickname, timastamp: Date.now()});
При подключении нового клиента сортировать записи по времени, брать 10 и каждое просто отправлять:
socket.on('new user', function(data, callback){
...
updateNicknames();
db.find({}).sort({timestamp: 1}).limit(10).exec(function(err, list) {
list.forEach(function(e) {
socket.emit('new message', e);
});
});
...
});
Ну для личного использования есть. На node.js немного мелких скриптов, по сути использование вместо bash. Есть локальный прокси сервер - перехватывает ссылки на хостинги изображений и заменяет на прямые ссылки на картинки. Если вообще js, есть пара расширений для хрома.
socket.on('send message', function(data){
db.insert({msg: data, nick: socket.nickname});
io.emit('new message', {msg: data, nick: socket.nickname});
});
Записи и в mongodb, и в nedb - это практически объекты js.
Вообще, наверное, историю сообщений можно просто в файл-журнал записывать.
Вообще документация у socket.io какая-то унылая, возможно полезно будет поковыряться через консоль devtools в браузере, а сервер можно из REPL запустить с помощью .load
Не сказал бы, что мало пособий по node, тот же https://learn.javascript.ru/nodejs-screencast на мой взгляд довольно полный и подробный.
Изменения происходят не такие уж и глобальные, да и важнее собственно архитектура приложения, тут по сути и с PHP не так много отличий будет. Единственное важное, по-моему, это асинхронность, а дальше уже всё определяет логика конкретного приложения.
Базу данных я бы для начала взял https://github.com/louischatriot/nedb потом можно без проблем на MongoDB перейти.
С комнатами по идее всё просто - на сервере сокет нужно подписать на комнату, и тогда он будет получать сообщения, отправляемые в комнату.
Устаревшая, это точно.
Лучше использовать в качестве разделителя /[\r\n]+\s*/, но если в исходной строке будут два перевода строки подряд, то в массиве все равно будет пустой элемент. Можно просто отфильтровать: str.split(/[\r\n]+\s*/).filter(funtion(e){return e;}) или воспользоваться для выделения строк match: str.match(/[^\s]+[^\r\n]+/g).
jsbin.com/xodopa/embed?js,console