Skip to content

Instantly share code, notes, and snippets.

View sk146's full-sized avatar
:octocat:
Thanks for the fish!

Sergey Karpenko sk146

:octocat:
Thanks for the fish!
View GitHub Profile
@sk146
sk146 / telegramChannelBot.md
Created November 13, 2020 01:36 — forked from zmts/telegramChannelBot.md
Используем Telegram канал в качестве системы оповещения

Используем Telegram канал в качестве системы оповещения

  • Создаем бота через глобального бота телеграма @BotFather
  • Создаем публичный канал через обычный клиент(desktop/mobile) с публичным именем
  • Добавляем бота в администраторы канала (с правами отправлять сообщения)
  • Отправляем тестовое сообщение в канал от имени только что созданного бота
#POST: https://api.telegram.org/bot<token>/sendMessage
{
  "chat_id": "@mysuperchannel",
@sk146
sk146 / encryption.js
Created November 13, 2020 01:36 — forked from zmts/encryption.js
Stronger Encryption and Decryption in Node.js
'use strict';
const crypto = require('crypto');
const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY; // Must be 256 bytes (32 characters)
const IV_LENGTH = 16; // For AES, this is always 16
function encrypt(text) {
let iv = crypto.randomBytes(IV_LENGTH);
let cipher = crypto.createCipheriv('aes-256-cbc', new Buffer(ENCRYPTION_KEY), iv);
@sk146
sk146 / imageLoadingStatus.md
Created November 13, 2020 01:36 — forked from zmts/imageLoadingStatus.md
Как проверить состояние загрузки изображения ?
@sk146
sk146 / aboutNodeJsArchitecture.md
Created November 13, 2020 01:36 — forked from zmts/aboutNodeJsArchitecture.md
A little bit about Node.js API Architecture

A little bit about Node.js API Architecture (Архитектура/паттерны организации кода Node.js приложений)

node.js

TL;DR

code: https://github.com/zmts/supra-api-nodejs

Предисловие

Одной из болезней Node.js комьюнити это отсутствие каких либо крупных фреймворков, действительно крупных уровня Symphony/Django/RoR/Spring. Что является причиной все ещё достаточно юного возраста данной технологии. И каждый кузнец кует как умеет ну или как в интернетах посоветовали. Собственно это моя попытка выковать некий свой подход к построению Node.js приложений.

@sk146
sk146 / permissions.md
Created November 13, 2020 01:36 — forked from zmts/permissions.md
Управление правами/ролями в Node.js приложениях (Permissions/ACL)

Управление правами/ролями в Node.js приложениях (Permissions/ACL)

Допустим у наc есть такой CRUD и мы хотим проверять права доступа к каждому екшену.

class PostsController extends BaseController {
  static get router () {
    router.get('/', actionRunner(actions.ListAction))
    router.get('/:id', actionRunner(actions.GetByIdAction))
    router.post('/', actionRunner(actions.CreateAction))
    router.patch('/', actionRunner(actions.UpdateAction))
@sk146
sk146 / seo_links.md
Created November 13, 2020 01:36 — forked from zmts/seo_links.md
SEO & ЧПУ
@sk146
sk146 / makeArray.md
Created November 13, 2020 01:34 — forked from zmts/makeArray.md
Create array with specific size Javascript

Create array with specific size Javascript

[  ...Array(10).keys() ] // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
@sk146
sk146 / docker.md
Created November 13, 2020 01:34 — forked from zmts/docker.md
Docker, TypeScript, Node.js

Docker, TypeScript, Node.js

Preconditions:

  • TS application listening port: 7777
|-- dist
|-- src
|-- .dockerignore
|-- Dockerfile
@sk146
sk146 / indexInForOf.md
Created November 13, 2020 01:33 — forked from zmts/indexInForOf.md
Get index in for of

Get index in for of

for (const [index, value] of ['a', 'b', 'c'].entries()) {
  console.log(index, value)
}

/*
0 "a"
1 "b"
@sk146
sk146 / raw_sql_vs_query_builders.md
Created November 13, 2020 01:33 — forked from zmts/raw_sql_vs_query_builders.md
Raw SQL query vs Query builders (Knex.js/Objection.js)

Raw SQL query vs Query builders (Knex.js/Objection.js)

Raw SQL

static async listPostsPublicRaw ({ offset, limit, filter = {} } = {}) {
    assert.integer(limit, { required: true, min: 10 })
    assert.integer(offset, { required: true, min: 0 })
    assert.validate(filter.blogId, BlogModel.schema.id, { required: true })
    assert.validate(filter.stackId, StackModel.schema.id)