@historydev
Острая аллергия на анимешников

Как ловить разницу между моделями при общении клиент => сервер?

У меня проблема - в базу попадают документы с полями которые не входят в схему валидации. Я ничего не смог нагуглить на этот счёт кроме двух вопросов без ответов и пришёл к выводу что пора типизировать входы/выходы. Однако, допустим у меня есть желаемый интерфейс входа в роут:

interface RequestModel<T> extends Request {
	body: T
}

interface UserRegisterModel {
	first_name: string;
	last_name: string;
	email: string;
	password: string;
}

app.post('/register', async (req: RequestModel<UserRegisterModel>, res) => {
	if(req.body) {
		const user: UserRegisterModel = req.body;
}
});


Это не помешает с клиента прокинуть лишние поля, которых нет в схеме, есть ещё пакеты для json схем, пока не стал ставить, но буду пробовать.
И так вопрос - Как мне либо в монго, либо в экспрессе отсечь все лишние поля?

Вот пример входа/выхода:
interface UserModel { id: string; } 
const userInput = { id: 'b88-c234' , name: 'John' };
const userOutput = userInput; // Сейчас получаем аналогичный объект пришедшему.
// А нужно получить по схеме, остальное убрать:
const userOutputWithSchema = { id: 'b88-c234'  }
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 2
yarkov
@yarkov
Помог ответ? Отметь решением.
interface RequestModel<T> extends Request {
  body: T
}

class UserRegisterModel {
  first_name: string;
  last_name: string;
  email: string;
  password: string;

  constructor({first_name}) {
    this.first_name = firstname;
    // И так все НУЖНЫЕ поля
  }
}

app.post('/register', async (req: RequestModel<UserRegisterModel>, res) => {
  if(req.body) {
    const user = new UserRegisterModel(req.body);
    // Хоба и лишних полей нет ))
}
});
Ответ написан
Комментировать
Alexandroppolus
@Alexandroppolus
кодир
req: RequestModel< UserRegisterModel>
const user: UserRegisterModel = req.body;
Это не помешает с клиента прокинуть лишние поля, которых нет в схеме

здесь проверка вообще не делается. Тебе нужна проверка в рантайме

есть ещё пакеты для json схем, пока не стал ставить, но буду пробовать.

ну собственно да, так и надо делать
в json-schema можно запретить или гибко настроить всё неучтённое https://json-schema.org/understanding-json-schema/...

для превращения типов JS в json-schema есть пакеты
https://www.npmjs.com/package/typescript-json-schema
https://www.npmjs.com/package/ts-json-schema-generator
и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы