Size: a a a

Node.js — русскоговорящее сообщество

2020 February 28

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Это не протокол vpn
источник

NN

No Name in Node.js — русскоговорящее сообщество
Sergey 🛸
Это не протокол vpn
а есть вообще в интернете схема как сделать впн и вообще теория как работает впн, как перенаправляется трафик и т.д - хочу изучить базу, потом сюда приду
источник

D

Dmeetrich in Node.js — русскоговорящее сообщество
Есть
источник

И

Илья | 😶 in Node.js — русскоговорящее сообщество
No Name
а есть вообще в интернете схема как сделать впн и вообще теория как работает впн, как перенаправляется трафик и т.д - хочу изучить базу, потом сюда приду
openvpn
сюда не надо идти
источник

АК

Алексей Карташов in Node.js — русскоговорящее сообщество
народ, а над DTO (который data transfer object) вообще кто-нибудь заморачивается? при чём в контексте чистого js, не ts.

я вот хочу данные между сервисами гонять в виде какой-то готовой провалидированной структуры. понаписал тут вот такое:

import assert from 'assert';

export default class BaseDTO {
 static schema;

 static validateByScheme(data, schema) {
   // validate by `ajv`
   // `throw new ValidationError()` if data is invalid
 }

 constructor(data) {
   const { schema, validateByScheme } = this.constructor;

   assert(schema, 'Schema is not defined');

   validateByScheme(data, schema);

   Object.assign(this, data);
 }

 toJSON() {
   return { ...this };
 }
}

ну и от BaseDTO можно отнаследоваться, например вот так:

class UserDTO extends BaseDTO {
 static schema = {
   type: 'object',
   properties: {
     firstName: { type: 'string' },
     lastName: { type: 'string' },
   },
 };

 get fullName() {
   return `${this.firstName} ${this.lastName}`;
 }

 toJSON() {
   const { fullName } = this;

   return {
     ...super.toJSON(),
     fullName,
   };
 }
}

т.е. в унаследованном классе прописываем схему, можно даже свою реализацию validateByScheme (например, для валидации Joi-ем, а не ajv), можно какие-то геттеры добавить и, если надо, эти геттеры подставить в результат toJSON'а.

Работает как-то так:

const user = new UserDTO({
 firstName: 'Pampampam',
 lastName: 'Pumpumpum',
});

console.log('user', JSON.stringify(user, null, 2));

/*
user {
 "firstName": "Pampampam",
 "lastName": "Pumpumpum",
 "fullName": "Pampampam Pumpumpum"
}
*/

В принципе, на первый взгляд выглядит более-менее.

Плюсы вижу такие:
1. такие dto можно инстанцировать прямо в контроллерах, что-то типа
new FiltersDTO(req.query)
или
new SearchFormDTO(req.body)
и, если данные неправильные, то ошибка отловится в мидлваре и клиенту уйдёт ответ с ошибками валидации и соответствующим http-кодом. А если данные по схеме прошли, то спокойно этот объект отдавать дальше во внутренние сервисы, в которых единственная необходимая проверка - это что-то типа такого:

class UsersService {
 /**
  * @param {UserDTO} user
  */
 constructor(user) {
   assert(user instanceof UserDTO);

   this.user = user;
 }

 // someMethod() {}
}

2. из этих схем когда-нибудь потом можно будет прикрутить генерацию документации к api.

Минусов на первый взгляд не вижу. Но поэтому вам сюда и пишу) Может есть какие-то подводные камни, которые прямо сейчас лично мне неочевидны?
Такой подход вообще норм?
источник

А

Андрей in Node.js — русскоговорящее сообщество
Привет. Перелопатил инет, так и не понял где ошибку делаю, на клиенте делаю проверку гугл капчой 2, на сервере надо как то проверить, и при чем тут токен который прилетает когда я на сервере капчу прошёл, куда то надо этот токен применять ?
источник

А

Андрей in Node.js — русскоговорящее сообщество
Сейчас не проходит проверку на сервере капча
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Алексей Карташов
народ, а над DTO (который data transfer object) вообще кто-нибудь заморачивается? при чём в контексте чистого js, не ts.

я вот хочу данные между сервисами гонять в виде какой-то готовой провалидированной структуры. понаписал тут вот такое:

import assert from 'assert';

export default class BaseDTO {
 static schema;

 static validateByScheme(data, schema) {
   // validate by `ajv`
   // `throw new ValidationError()` if data is invalid
 }

 constructor(data) {
   const { schema, validateByScheme } = this.constructor;

   assert(schema, 'Schema is not defined');

   validateByScheme(data, schema);

   Object.assign(this, data);
 }

 toJSON() {
   return { ...this };
 }
}

ну и от BaseDTO можно отнаследоваться, например вот так:

class UserDTO extends BaseDTO {
 static schema = {
   type: 'object',
   properties: {
     firstName: { type: 'string' },
     lastName: { type: 'string' },
   },
 };

 get fullName() {
   return `${this.firstName} ${this.lastName}`;
 }

 toJSON() {
   const { fullName } = this;

   return {
     ...super.toJSON(),
     fullName,
   };
 }
}

т.е. в унаследованном классе прописываем схему, можно даже свою реализацию validateByScheme (например, для валидации Joi-ем, а не ajv), можно какие-то геттеры добавить и, если надо, эти геттеры подставить в результат toJSON'а.

Работает как-то так:

const user = new UserDTO({
 firstName: 'Pampampam',
 lastName: 'Pumpumpum',
});

console.log('user', JSON.stringify(user, null, 2));

/*
user {
 "firstName": "Pampampam",
 "lastName": "Pumpumpum",
 "fullName": "Pampampam Pumpumpum"
}
*/

В принципе, на первый взгляд выглядит более-менее.

Плюсы вижу такие:
1. такие dto можно инстанцировать прямо в контроллерах, что-то типа
new FiltersDTO(req.query)
или
new SearchFormDTO(req.body)
и, если данные неправильные, то ошибка отловится в мидлваре и клиенту уйдёт ответ с ошибками валидации и соответствующим http-кодом. А если данные по схеме прошли, то спокойно этот объект отдавать дальше во внутренние сервисы, в которых единственная необходимая проверка - это что-то типа такого:

class UsersService {
 /**
  * @param {UserDTO} user
  */
 constructor(user) {
   assert(user instanceof UserDTO);

   this.user = user;
 }

 // someMethod() {}
}

2. из этих схем когда-нибудь потом можно будет прикрутить генерацию документации к api.

Минусов на первый взгляд не вижу. Но поэтому вам сюда и пишу) Может есть какие-то подводные камни, которые прямо сейчас лично мне неочевидны?
Такой подход вообще норм?
Схема должна быть отдельно от dto. В dto только поля с данными
источник

АК

Алексей Карташов in Node.js — русскоговорящее сообщество
Sergey 🛸
Схема должна быть отдельно от dto. В dto только поля с данными
ну так-то схему можно в отдельный файлик положить) или их логически нельзя смешивать?
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Логически
источник

АК

Алексей Карташов in Node.js — русскоговорящее сообщество
а почему? просто по мне - так красиво же, объект - валидируется сразу же, при инстансе, и везде где бы он дальше не использовался - я буду уверен в том, что он не кривой
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Потому что на один и тот же валидатор можно подать разные dto с разным набором данных
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
К примеру dto admin будет иметь больше полей чем dto user, но вадидацию на подписку на новости они оба будут проходить
источник

NN

No Name in Node.js — русскоговорящее сообщество
Sergey 🛸
Для хрома достаточно socks протокол реализовать
Я так понял что б открыть сайт заблокированный, мне нужно получить пакеты на уровне tcp, прогнать через внешний сервер и отправить себе на комп?
источник

АК

Алексей Карташов in Node.js — русскоговорящее сообщество
Sergey 🛸
Потому что на один и тот же валидатор можно подать разные dto с разным набором данных
ну так ведь в UserDTO можно прописать схему, допускающую вариативность, и условного админа туда можно засунуть, разве нет?
источник

АК

Алексей Карташов in Node.js — русскоговорящее сообщество
ещё и условный геттер isAdmin можно добавить
источник

KG

Kool Guy in Node.js — русскоговорящее сообщество
Алексей Карташов
народ, а над DTO (который data transfer object) вообще кто-нибудь заморачивается? при чём в контексте чистого js, не ts.

я вот хочу данные между сервисами гонять в виде какой-то готовой провалидированной структуры. понаписал тут вот такое:

import assert from 'assert';

export default class BaseDTO {
 static schema;

 static validateByScheme(data, schema) {
   // validate by `ajv`
   // `throw new ValidationError()` if data is invalid
 }

 constructor(data) {
   const { schema, validateByScheme } = this.constructor;

   assert(schema, 'Schema is not defined');

   validateByScheme(data, schema);

   Object.assign(this, data);
 }

 toJSON() {
   return { ...this };
 }
}

ну и от BaseDTO можно отнаследоваться, например вот так:

class UserDTO extends BaseDTO {
 static schema = {
   type: 'object',
   properties: {
     firstName: { type: 'string' },
     lastName: { type: 'string' },
   },
 };

 get fullName() {
   return `${this.firstName} ${this.lastName}`;
 }

 toJSON() {
   const { fullName } = this;

   return {
     ...super.toJSON(),
     fullName,
   };
 }
}

т.е. в унаследованном классе прописываем схему, можно даже свою реализацию validateByScheme (например, для валидации Joi-ем, а не ajv), можно какие-то геттеры добавить и, если надо, эти геттеры подставить в результат toJSON'а.

Работает как-то так:

const user = new UserDTO({
 firstName: 'Pampampam',
 lastName: 'Pumpumpum',
});

console.log('user', JSON.stringify(user, null, 2));

/*
user {
 "firstName": "Pampampam",
 "lastName": "Pumpumpum",
 "fullName": "Pampampam Pumpumpum"
}
*/

В принципе, на первый взгляд выглядит более-менее.

Плюсы вижу такие:
1. такие dto можно инстанцировать прямо в контроллерах, что-то типа
new FiltersDTO(req.query)
или
new SearchFormDTO(req.body)
и, если данные неправильные, то ошибка отловится в мидлваре и клиенту уйдёт ответ с ошибками валидации и соответствующим http-кодом. А если данные по схеме прошли, то спокойно этот объект отдавать дальше во внутренние сервисы, в которых единственная необходимая проверка - это что-то типа такого:

class UsersService {
 /**
  * @param {UserDTO} user
  */
 constructor(user) {
   assert(user instanceof UserDTO);

   this.user = user;
 }

 // someMethod() {}
}

2. из этих схем когда-нибудь потом можно будет прикрутить генерацию документации к api.

Минусов на первый взгляд не вижу. Но поэтому вам сюда и пишу) Может есть какие-то подводные камни, которые прямо сейчас лично мне неочевидны?
Такой подход вообще норм?
как же все сложно
источник

АК

Алексей Карташов in Node.js — русскоговорящее сообщество
я просто пытаюсь разобраться, как лучше поступить и как построить приложение, поэтому такие вопросы. я не придираюсь)
источник

АК

Алексей Карташов in Node.js — русскоговорящее сообщество
Kool Guy
как же все сложно
а как сделать просто?)
источник

KG

Kool Guy in Node.js — русскоговорящее сообщество
cons userDTO = new UserDTO(userData)
источник