{"id":21512051,"url":"https://github.com/strvcom/nodejs-nights-2017","last_synced_at":"2025-04-09T18:21:59.929Z","repository":{"id":97727750,"uuid":"90235933","full_name":"strvcom/nodejs-nights-2017","owner":"strvcom","description":"Resources created during Node.js Nights course.","archived":false,"fork":false,"pushed_at":"2017-07-04T06:12:37.000Z","size":492,"stargazers_count":10,"open_issues_count":0,"forks_count":4,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-23T20:22:22.057Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/strvcom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-05-04T07:48:33.000Z","updated_at":"2024-10-16T20:24:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"308c679a-5055-415d-be6d-0dfd6c6e7fe6","html_url":"https://github.com/strvcom/nodejs-nights-2017","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strvcom%2Fnodejs-nights-2017","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strvcom%2Fnodejs-nights-2017/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strvcom%2Fnodejs-nights-2017/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strvcom%2Fnodejs-nights-2017/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/strvcom","download_url":"https://codeload.github.com/strvcom/nodejs-nights-2017/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248085645,"owners_count":21045192,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-23T22:25:53.403Z","updated_at":"2025-04-09T18:21:59.912Z","avatar_url":"https://github.com/strvcom.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Node.js Nights Course\n\nThis repository contains resources from STRV Node.js Nights course. Here is the list of covered topics:\n\n[1. JavaScript](./01-javascript)  \n[2. Node.js introduction](./02-node-js)  \n[3. NPM, TCP \u0026 HTTP servers, REST API](./03-npm-servers-rest)  \n[4. Koa](./04-koa)  \n[5. Errors, validation, Docker](./05-errors-validation-docker)  \n[6. PG client, sequelize ORM](./06-docker-pg-sequelize)  \n[7. Password hashing, tests, tests coverage](./07-bcrypt-tests-coverage)  \n[8. Deployment](./08-deployment)  \n[9. Workers](./09-workers)  \n\n## Links:\n[Slides from lectures](https://docs.google.com/a/strv.com/presentation/d/1JlkZUztqhOxXxhyypeoJQ_Ufz6kQ3oY4xy0oTcahczA/edit?usp=sharing)  \n[Project repository](https://github.com/strvcom/nodejs-nights-project)  \n\n## List of packages:\n\n### REST API\n\n| Library | Desciption |\n|:--------|:-----------|\n| [koa][npm-koa] | Main framework for building REST APIs. |\n| [koa-body][npm-koa-body] | Koa middleware for parsing request bodies. |\n| [kcors][npm-kcors] | Koa middleware which allows setup of access control headers. |\n| [koa-compose][npm-koa-compose] | Koa helper to compose multiple middleware functions into one. |\n| [koa-router][npm-koa-router] | Koa package for REST API routes definition.\n| [koa-static2][npm-koa-static2] | Package for static files serving. |\n| [koa-compress][npm-koa-compress] | Koa package for request/response compression. |\n| [express][npm-express] | Koa framework alternative. |\n| [hapi][npm-hapi] | Koa framework alternative. |\n\n[npm-express]: https://npmjs.com/package/express\n[npm-hapi]: https://npmjs.com/package/hapi\n[npm-kcors]: https://npmjs.com/package/kcors\n[npm-koa-body]: https://npmjs.com/package/koa-body\n[npm-koa-compose]: https://npmjs.com/package/koa-compose\n[npm-koa-compress]: https://npmjs.com/package/koa-compress\n[npm-koa-router]: https://npmjs.com/package/koa-router\n[npm-koa-static2]: https://npmjs.com/package/koa-static2\n[npm-koa]: https://npmjs.com/package/koa\n\n### Data validation\n\n| Library | Desciption |\n|:--------|:-----------|\n| [joi][npm-joi] | Popular validation library. |\n| [ajv][npm-ajv] | Claimed to be the fastest validation library, uses JSON schema. |\n| [jsonschema][npm-jsonschema] | Another validation library which uses JSON schema. |\n\n[npm-ajv]: https://npmjs.com/package/ajv\n[npm-joi]: https://npmjs.com/package/joi\n[npm-jsonschema]: https://www.npmjs.com/package/jsonschema\n\n### Logging\n\n| Library | Desciption |\n|:--------|:-----------|\n| [bunyan][npm-bunyan] | Very popular logging library, it allows sending logs to multiple output streams. |\n| [pino][npm-pino] | Logging library with the same API as bunyan. It is claimed to be much faster than other logging libraries. |\n\n[npm-bunyan]: https://npmjs.com/package/bunyan\n[npm-pino]: https://npmjs.com/package/pino\n\n### Authorization \u0026 hashing\n\n| Library | Desciption |\n|:--------|:-----------|\n| [jsonwebtoken][npm-jsonwebtoken] | Library generating JSON web tokens. |\n| [bcrypt][npm-bcrypt] | Most popular library for password hahing. |\n\n[npm-bcrypt]: https://npmjs.com/package/bcrypt\n[npm-jsonwebtoken]: https://npmjs.com/package/jsonwebtoken\n\n### Databases\n\n| Library | Desciption |\n|:--------|:-----------|\n| [pg][npm-pg] | Client for the Postgres database. |\n| [pg-promise][npm-pg-promise] | `pg` package wrapper adding Promise interface. |\n| [sequelize][npm-sequelize] | Very popular ORM for Postgres, MySql and other SQL databases. |\n| [objection][npm-objection] | Alternative to `sequelize` package. |\n| [mongodb][npm-mongodb] | Official Node.js client for MongoDB. |\n| [mongoose][npm-mongoose] | MongoDB ORM library. |\n\n[npm-mongodb]: https://npmjs.com/package/mongodb\n[npm-mongoose]: https://npmjs.com/package/mongoose\n[npm-objection]: https://npmjs.com/package/objection\n[npm-pg-promise]: https://npmjs.com/package/pg-promise\n[npm-pg]: https://npmjs.com/package/pg\n[npm-sequelize]: https://npmjs.com/package/sequelize\n\n### Tests\n\n| Library | Desciption |\n|:--------|:-----------|\n| [mocha][npm-mocha] | Favorite test runner. |\n| [mocha-http-detect][npm-mocha-http-detect] | Mocha addon to detect whether tests are sending request to external systems. |\n| [chai][npm-chai] | Probably the most favorite assertion library (use expect syntax). |\n| [dirty-chai][npm-dirty-chai] | Library which converts chai property access assertions to method calls. |\n| [chai-as-promised][npm-chai-as-promised] | Chai addon adding Promise assertions. |\n| [chai-shallow-deep-equal][npm-chai-shallow-deep-equal] | Chai addon adding assertion for shalow comparison of two objects keys and values. |\n| [tape][npm-tape] | Another tests runner, mocha alternative. |\n| [jest][npm-jest] | Tests runner from Facebook, very popular on frontend but it can be used on backend too. |\n| [ava][npm-ava] | Another tests runner, mocha alternative. |\n| [sinon][npm-sinon] | Popular mocking library. |\n| [sinon-chai][npm-sinon-chai] | Chai addon adding assertions on sinon stubs and mocks. |\n| [supertest-koa-agent][npm-supertest-koa-agent] | Package that can start Koa app instance and send requests to it. |\n| [chance][npm-chance] | Package for fake data generating. |\n| [faker][npm-faker] | Package for fake data generating. |\n\n[npm-ava]: https://npmjs.com/package/ava\n[npm-chai-as-promised]: https://npmjs.com/package/chai-as-promised\n[npm-chai-shallow-deep-equal]: https://npmjs.com/package/chai-shallow-deep-equal\n[npm-chai]: https://npmjs.com/package/chai\n[npm-chance]: https://npmjs.com/package/chance\n[npm-dirty-chai]: https://npmjs.com/package/dirty-chai\n[npm-faker]: https://npmjs.com/package/faker\n[npm-jest]: https://npmjs.com/package/jest\n[npm-mocha-http-detect]: https://npmjs.com/package/mocha-http-detect\n[npm-mocha]: https://npmjs.com/package/mocha\n[npm-sinon-chai]: https://npmjs.com/package/sinon-chai\n[npm-sinon]: https://npmjs.com/package/sinon\n[npm-supertest-koa-agent]: https://npmjs.com/package/supertest-koa-agent\n[npm-tape]: https://npmjs.com/package/tape\n\n### Tests coverage\n\n| Library | Desciption |\n|:--------|:-----------|\n| [istanbul][npm-istanbul] | Tests coverage generator. |\n| [nyc][npm-nyc] | Istanbul's wrapper. |\n\n[npm-istanbul]: https://npmjs.com/package/istanbul\n[npm-nyc]: https://npmjs.com/package/nyc\n\n### Server monitoring\n\n| Library | Desciption |\n|:--------|:-----------|\n| [newrelic][npm-newrelic] | Nice easy-to-use package for server monitoring. |\n\n[npm-newrelic]: https://npmjs.com/package/newrelic\n\n### Queues\n\n| Library | Desciption |\n|:--------|:-----------|\n| [bull][npm-bull] | Easy-to-use package for queues (uses Redis). |\n| [amqplib][npm-amqplib] | RabbitMQ queue client. |\n\n[npm-amqplib]: https://npmjs.com/package/amqplib\n[npm-bull]: https://npmjs.com/package/bull\n\n### Image resizing\n\n| Library | Desciption |\n|:--------|:-----------|\n| [sharp][npm-sharp] | Nice package for image resizing. |\n\n[npm-sharp]: https://npmjs.com/package/sharp\n\n### Sending emails\n\n| Library | Desciption |\n|:--------|:-----------|\n| [nodemailer][npm-nodemailer] | Supports all kinds of email providers. |\n| [sendgrid-mailer][npm-sendgrid-mailer] | Sendgrid client, wrapper of the `sendgrid` package. |\n\n[npm-nodemailer]: https://npmjs.com/package/nodemailer\n[npm-sendgrid-mailer]: https://npmjs.com/package/sendgrid-mailer\n\n### Payments\n\n| Library | Desciption |\n|:--------|:-----------|\n| [stripe][npm-stripe] | Stripe payment system client. |\n| [braintree][npm-braintree] | Braintree payment system client. |\n| [iap][npm-iap] | In-app purchases validation. |\n\n[npm-braintree]: https://npmjs.com/package/braintree\n[npm-iap]: https://npmjs.com/package/iap\n[npm-stripe]: https://npmjs.com/package/stripe\n\n### Other\n\n| Library | Desciption |\n|:--------|:-----------|\n| [uuid][npm-uuid] | Unique identifier generator. |\n| [lodash][npm-lodash] | Package with all kinds of utilities on JavaScript objects and collections. |\n| [request][npm-request] | Allows sending HTTP requests. |\n| [request-promise][npm-request-promise] | Wrapper of the `request` package adding Promise interface. |\n| [twilio][npm-twilio] | Twilio client, allows sending SMS. |\n| [bluebird][npm-bluebird] | Promise implementation. Requires less memory than native Promise, adds bunch of useful methods. |\n| [xml2js][npm-xml2js] | Package for generating and parsing XML data (if you really have to). |\n| [cheerio][npm-cheerio] | Package for web scraping. |\n| [dotenv][npm-dotenv] | Package allowing loading configuration of process.env variables from `.env` file. |\n| [moment][npm-moment] | Date manipulation. |\n| [nodestream][npm-nodestream] | File uploads/downloads. |\n| [randomstring][npm-randomstring] | Random string generator. |\n| [shortid][npm-shortid] | Short ID generator. |\n| [async][npm-async] | Async control flow (run functions is parallel, series, iterations, simple workers etc.). |\n\n[npm-async]: https://npmjs.com/package/async\n[npm-bluebird]: https://npmjs.com/package/bluebird\n[npm-cheerio]: https://npmjs.com/package/cheerio\n[npm-dotenv]: https://npmjs.com/package/dotenv\n[npm-lodash]: https://npmjs.com/package/lodash\n[npm-moment]: https://npmjs.com/package/moment\n[npm-nodestream]: https://npmjs.com/package/nodestream\n[npm-randomstring]: https://npmjs.com/package/randomstring\n[npm-request-promise]: https://npmjs.com/package/request-promise\n[npm-request]: https://npmjs.com/package/request\n[npm-shortid]: https://npmjs.com/package/shortid\n[npm-twilio]: https://npmjs.com/package/twilio\n[npm-uuid]: https://npmjs.com/package/uuid\n[npm-xml2js]: https://npmjs.com/package/xml2js\n\n## Other resources:\n- [Node school](https://nodeschool.io/)\n- [GraphQL](http://graphql.org/learn/)\n- [Apollo stack](https://www.apollodata.com/)\n- [Docker](http://docker.com/)\n- [Node news](http://nodeweekly.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrvcom%2Fnodejs-nights-2017","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstrvcom%2Fnodejs-nights-2017","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrvcom%2Fnodejs-nights-2017/lists"}