
Renat
06.12.2017
09:22:05
убили киллерфичу rethinkdb

500 Internal Server Error
06.12.2017
09:34:34

Anton
06.12.2017
09:38:40
убили киллерфичу rethinkdb
так он вроде не особо живой уже был, у них там тяжкие времена настали с поддержкой, когда я последний раз смотрел на него. хотя может чего изменилось уже

Renat
06.12.2017
09:39:45

Google

Will
06.12.2017
10:29:55
Господа, написал тут маленького телеграм бота на ноде, может кто мне код ревью провести?

1nd2rd3st
06.12.2017
10:32:41
Не вижу никакого кода
Где ссылка на гитхаб?

Will
06.12.2017
10:33:36
https://github.com/WillDonut/telegram-bot-which-hates-stickers
Я хотел в личку кинуть, но ладно опозорюсь на 2к человек.

Vsevolod
06.12.2017
10:37:10
ну такое, зачем миксить колбеки и промисы? почему асинк\авейт не заюзать? по самому стилю кода тоже бы все к единому целому привести

Yashko?
06.12.2017
10:37:12
https://github.com/WillDonut/telegram-bot-which-hates-stickers/blob/master/src/tools.js#L4 тут for поменять на одну строчку по хорошему

Will
06.12.2017
10:37:47

Yashko?
06.12.2017
10:38:25
там где if (err) должен быть throw по хорошему

500 Internal Server Error
06.12.2017
10:38:41
events.js L100 то что внутри if вынеси лучше в переменную с понятным названием, а то непонятно при каких случаях условие должно сработать

Will
06.12.2017
10:38:48

Yashko?
06.12.2017
10:39:28
https://github.com/WillDonut/telegram-bot-which-hates-stickers/blob/master/src/commands.js#L74
тут не понятно почему пустой массив аж на три строки? "packs": []

Will
06.12.2017
10:40:06

Vsevolod
06.12.2017
10:40:19
так тогда все пованильнее фигач

Google

Yashko?
06.12.2017
10:40:20
по consistency - где-то в коде используется строгое сравнение, где-то нестрогое
https://github.com/WillDonut/telegram-bot-which-hates-stickers/blob/master/src/commands.js#L41 тут !=, семь строк ниже !==

Will
06.12.2017
10:41:48

Yashko?
06.12.2017
10:42:21
https://github.com/WillDonut/telegram-bot-which-hates-stickers/blob/master/src/tools.js#L31
подобные конструкции можно менять на
module.exports = { isBotAdmin, isUserAdmin }
и много странных пустых строк, стоит юзать линтер или что-то подобное
https://github.com/WillDonut/telegram-bot-which-hates-stickers/blob/master/src/commands.js#L35

Kelin
06.12.2017
10:43:06

Yashko?
06.12.2017
10:43:17
тогда бы вместо for был бы map :)))

Ivan
06.12.2017
10:43:47
Всем привет. Работаю в reg.ru разработчиком. Знаю много всего про Perl, архитектуру веб-проектов, удаленную командную разработку, новичок в ноде. Надеюсь, сообщество подскажет и наставит на путь истиный в изучении ноды. Сам и Москвы. Узнал из поиска. #whois

HashTag
06.12.2017
10:43:47
Подписка на #whois

Таймураз
06.12.2017
10:45:25

Ivan
06.12.2017
10:45:54
Это не ко мне, а к бизнесу ))

Yashko?
06.12.2017
10:45:56
это все есть в соглашении, которое вы принимаете ставя галочку (:
и о всех ценах заранее сообщают

Таймураз
06.12.2017
10:46:23

Kelin
06.12.2017
10:46:26

Ivan
06.12.2017
10:46:32
Как я понимаю здесь чат про ноду, а не про домены

Таймураз
06.12.2017
10:46:37
Я уже сваливаю с reg.ru обратно

Yashko?
06.12.2017
10:46:37
☝️

Dmitriy
06.12.2017
10:46:59
Всем привет, работаю в МТС ИТ руководителем проектов по разработке, много лет занимался разработкой (в основном PHP). С NodeJS с 2013 года. Всем добра ) #whois

HashTag
06.12.2017
10:46:59
Подписка на #whois

Google

Kelin
06.12.2017
10:47:02

Таймураз
06.12.2017
10:47:19

Will
06.12.2017
10:48:20

Таймураз
06.12.2017
10:48:35

Yashko?
06.12.2017
10:48:37
он никак не мешает ванильности :D

Ivan
06.12.2017
10:48:44
Подскажите как справиться с падением express.js. На ошибке TypeError: Cannot read property 'match' of undefined падает. Обработчик ошибок по инструкции из доки официальной. Но чего-то он не обрабатывает нифига, хотя по идее любой нормальный веб-сервер такого рода ошибки должен нормально обрабатывать и не падать

Will
06.12.2017
10:49:02

Таймураз
06.12.2017
10:49:04

Yashko?
06.12.2017
10:49:13
где-то вызывается match на undefined. Скорее всего на вашей части кода, а не на express

Таймураз
06.12.2017
10:49:16

Kelin
06.12.2017
10:49:51

Ivan
06.12.2017
10:50:11
app.use(function errorHandler(err, req, res, next) {
if ( err ) {
console.error(err.stack);
res.status(500).send('Something broke!');
return;
}
next();
});

Таймураз
06.12.2017
10:50:14
NOOOOOOO
Идите вы со своим отсутствием ; !)

Kelin
06.12.2017
10:50:35

Ivan
06.12.2017
10:50:36
Функция в мидварине сама

Yashko?
06.12.2017
10:50:55
это какая версия express? в последней только три аргумента в middleware
А, вижу

Will
06.12.2017
10:51:17

Таймураз
06.12.2017
10:51:19

Ivan
06.12.2017
10:51:41
"express": "4.14.0",

Google

Will
06.12.2017
10:51:46

Yashko?
06.12.2017
10:52:08


Ivan
06.12.2017
10:52:51
TypeError: Cannot read property 'match' of undefined
at Function.gqlquery (/opt/***/middleware/logger.js:19:16)
at /opt/***/middleware/logger.js:11:20
at Array.logRequest (/opt/***/node_modules/morgan/index.js:122:18)
at listener (/opt/***/node_modules/on-finished/index.js:169:15)
at onFinish (/opt/***/node_modules/on-finished/index.js:100:5)
at callback (/opt/***/node_modules/ee-first/index.js:55:10)
at ServerResponse.onevent (/opt/***/node_modules/ee-first/index.js:93:5)
at emitNone (events.js:110:20)
at ServerResponse.emit (events.js:207:7)
at onFinish (_http_outgoing.js:733:10)
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
[nodemon] app crashed - waiting for file changes before starting...
logger.js
import morgan from 'morgan';
module.exports = function() {
return morgan(function (tokens, req, res) {
return [
'==>',
tokens.method(req, res),
tokens.url(req, res),
tokens.status(req, res), ' : ',
tokens.gqlquery(req, res), '-',
tokens['response-time'](req, res), 'ms',
].join(' ');
});
};
morgan.token('gqlquery', function (req, res) {
let list = req.body.query.match(/(query[^{]+) \{/);
if ( list ) {
return list[0];
}
return '';
});


Таймураз
06.12.2017
10:54:19
logger.js
import morgan from 'morgan';
module.exports = function() {
return morgan(function (tokens, req, res) {
return [
'==>',
tokens.method(req, res),
tokens.url(req, res),
tokens.status(req, res), ' : ',
tokens.gqlquery(req, res), '-',
tokens['response-time'](req, res), 'ms',
].join(' ');
});
};
morgan.token('gqlquery', function (req, res) {
let list = req.body.query.match(/(query[^{]+) \{/);
if ( list ) {
return list[0];
}
return '';
});
req.body.query не задан

Yashko?
06.12.2017
10:54:28
+

Ivan
06.12.2017
10:54:30
То что оно там падает это норм. Непонятно почему express крашится
он должен вернуть 500

Admin
ERROR: S client not available

Ivan
06.12.2017
10:55:08
или я что-то не понимаю

Таймураз
06.12.2017
10:55:12

Yashko?
06.12.2017
10:55:16
оберните в try catch query.match и падать не будет, тк падает весь процесс

Таймураз
06.12.2017
10:56:06

Ivan
06.12.2017
10:56:18
Те получается любой код middleware и обработчиков роутов нужно в try заворачивать?

Таймураз
06.12.2017
10:57:11

Ivan
06.12.2017
10:57:26
app.use

Таймураз
06.12.2017
10:57:26
Сек, внимательнее код прочту

Yashko?
06.12.2017
10:58:00
везде где вызов метода над undefined (который не имеет методов) - будет креш

Ivan
06.12.2017
10:58:01
Сам хендлер ошибок
module.exports = function errorHandler(err, req, res, next) {
if ( err ) {
console.error(err.stack);
res.status(500).send('Something broke!');
return;
}
next();
}

Yashko?
06.12.2017
10:58:09
поэтому либо надо проверять на undefined, либо оборачивать в try catch

Google

Ivan
06.12.2017
10:58:31
и в основном скрипте app.use(errorHandler) в конце

Yashko?
06.12.2017
10:58:47
например If (foo && foo.bar && foo.bar.xyz) , либо try catch на мидлвар

Ivan
06.12.2017
10:59:20
А в express middleware не обарачивается в try разве?

Yashko?
06.12.2017
10:59:28

Таймураз
06.12.2017
10:59:28

Ivan
06.12.2017
11:00:02
что значит вне экспресса?

Таймураз
06.12.2017
11:00:20
У него область видимости не наследуется от функции, которая потом будет передана в экспресс
У тебя код лежит на уровне модуля
Модуль- тоже функция

Ivan
06.12.2017
11:01:10
вот блин

Таймураз
06.12.2017
11:01:21
Колбек внутри morgan.token будет наследовать контекст модуля

Yashko?
06.12.2017
11:02:08

Ivan
06.12.2017
11:02:08
Те получается если в любом стороннем модуле будет подобная бага, то экспресс рухнет и ничего с этим не сделаешь?

Yashko?
06.12.2017
11:02:14
падает не экспресс

Таймураз
06.12.2017
11:02:40
Для этого тебе нужно в экспресс передать функцию, которая выполнит все это
wrapper

Ivan
06.12.2017
11:03:59
Есть какой-то глобальный хендлер в ноде, с помощью которого можено ошибки обрабатывать и не убирвать процесс?

Таймураз
06.12.2017
11:04:10

Yashko?
06.12.2017
11:04:10
try catch ?:)

Таймураз
06.12.2017
11:04:51
Как факт- process.on('uncaughtException', (err) => {})