Closed Katarinich closed 7 years ago
Спасибо за публикацию. Вот ресурсы которые мы успели обсудить:
Расширенная версия материалов для самостоятельного изучения доступна на https://github.com/grsu/web-dev-materials/blob/master/textbook/README.md
Любые вопросы и замечания приветствуются. Дайте знать если нужно дать ещё больше материалов вперёд.
Был переписан сервер на express и добавлен package.json. Просмотрены материалы, почти все опробованы (некоторые неудачно). Ожидаются дальнейшие указания.
Написаны простейшие тесты на Supertest-e.
@Katarinich @Stelmashenko-A Давайте подключим JSCS и ESLint, так как в коде пока нет общего стиля, где-то табы, где-то пробелы для отступов испльзованы.
Кроме этого тесты следует расширить на тестирования не только кода 200, но и на тестирование тела ответа. Для этого подойдёт любая assertion library, например http://chaijs.com/guide/styles/#expect
Остальные комментарии оставлю по коду.
Посмотрите на https://mochajs.org/ и http://chaijs.com/guide/styles/#expect для организации ваших тестов.
Отличная работа!
Подытожим. Перед переходом к клиентской части, было бы здорово добавить jscs + eslint для автоматического анализа кода (и контроля его качества) и тесты на mocha + chai (expect).
Как только npm test
покажет отчёт по исполнению тестов и анализу кода - смело приступайте к клиентсой части: посмотрите XMLHttpRequest и fetch API.
Возникли некоторые вопросы по поводу jscs + eslint. Происходят какие-то достаточно странные вещи: в разных файлах подчёркиваются разные кавычки (где двойные, где одинарные), судя по всему eslint сканирует только на одну директорию глубже, так как в папке GrsuLoader подсветка отсутсвует. Это нормальное поведение? (VS Code). При запуске npm test выдаётся отчёт mocha, тестов на ней пока нету.
@Stelmashenko-A давайте с этим поведением на следуещей лабе, подозреваю что что-то недонастроено, или настроены противоречивые правила jscs и eslint; попробуйте сперва подключить только одну из библиотек.
И пусть вас это пока не смущает - двигайтесь дальше, потом по ходу настроите.
Попытался сдвинуться дальше, получил достаточно странную ошибку http://stackoverflow.com/questions/35969322/file-gssapi-js-package-json-not-found/35969485?noredirect=1#comment59593304_35969485 При этом с консоли всё запускается замечательно через node src/app.js, но каждый раз надо менять порт.
Андрей, попробуйте описать подробные шаги для воспроизведения ошибки и показать полный текст ошибки как он есть. Не имея воспроизводимой ошибки сложно предложить решение.
Если хотите короткий путь: rm -rf node_modules && npm i
может и поможет.
Кстати, а зачем вам в зависимостях и mongoose и mongodb обновременно?
@irnc Возник вопрос. Вы говорили, что нужно просмотреть XMLHttpRequest и fetch API. Можно тут поподробнее? Точнее, как их использовать в контексте nodejs приложений. Ничего толкового найдено не было.
Клиент должен быть полностью независимы от nodejs - сервера или же вышеупомянутый сервер также должен раздавать файлы клиента?
Существуют ли способы оптимизации кода наподобие этого https://github.com/Stelmashenko-A/Timetable/blob/dev/src/timetable_miner.js#L41-L50 ?
Этот код делает только один асинхронный вызов, но вложенность там третьего уровня получается. Обратите внимание, что у вас есть все входные данные, вам нужно сперва получить произведения трёх множеств, и над полученными триадами вызвать функцию загрузки.
Что-то наподобие такого должно выйти? https://github.com/Stelmashenko-A/Timetable/blob/dev/src/timetable_miner.js#L34-L71
Обратных вызовов меньше, но функций всё ещё много. Там где три итерации, это у вас произведение множеств. Чтоб не повторяться - можно вынести в отдельную функцию, например как в https://github.com/izaakschroeder/cartesian-product
Ну и посмотрите на lodash - много утилитарных функций, которые упростят вам работу с данными.
Если Вы имели ввиду вынос в отдельный модуль, то как-то так https://github.com/Stelmashenko-A/Timetable/blob/dev/src/lib/request-params.js , или делать уневерсально копируя/подключая cartesian-product?
request-params.js
уже хорошое решение, в дальнейшем вы сможете сделать рефакторинг и если захотите, подключить cartesian-product
Насколько критично для индивидуального графика один раз не прийти в двухнедельное окно? Близится здача курсовой (28-ого), поэтому совсем нет времени, плюс упало api.grsu.by (503), зато знаю, что теперь ошибки успешно обрабатываются.
@Stelmashenko-A Совсем не критично, готовьтесь к курсовой. Хорошо что ошибки обрабатываются :)
Завтра (04.05.2016) будет две пары или это деканат доставил вторую в своих целях? Так жеозникла непридвиденная проблема, сервер api.grsu.by работает крайне нестабильно и последнее время лежит больше чем работает, изначально предпологал, что он больше 200 запросов не выдерживает (упал после такого), но скорее всего это было случайным совпадением, так как падает он и без запуска моего приложения. На данный момент ошибка такая. ERROR: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) Это всё замедляет разработку и видимо проект не будет доделан. Насколько завершённая весия нужна на зачёт?
Я бы сказал не нужна, раз проблема во внешнем сервисе. Другой вопрос в том, что сделать получение информации и её кеширование было задачей номер один на этом проекте. Обидно что этого не успели.
Завтра (04.05.2016) будет две пары или это деканат доставил вторую в своих целях?
Приходите к 17:00.
https://github.com/Stelmashenko-A/Timetable