CRUD в Typescript с мангустом - проверка параметров запроса

Я хочу добавить документ в свою коллекцию БД только после проверки всех req.query похожих на мои IGroupDocument на контроллере перед вставкой.

Какова наилучшая практика для этого?

IGroupDocument:

import { Document, Model } from "mongoose";

export interface IGroup {

    firstName: string;
    lastName: string;
    age?: number;
    email: string,
    dateOfEntry?: Date;
}

export interface IGroupDocument extends IGroup, Document {}

Контроллер:

function create(req: Request, res: Response) {
// req.query validation: if firstName, lastName and email exist and type string, and then make a document from req.query call newGroup.
    GroupModel.create(newGroup)
    res.send(`${req.query.name} created`)
}

Вы должны хотя бы предоставить нам пример кода, чтобы увидеть, с чем именно вы сейчас боретесь. Вы используете простой javascript с библиотекой мангуста? Вы хотите выполнить проверку на уровне контроллера или на уровне схемы?

Fabian Strathaus 10.11.2022 11:30

Извините, я исправил вопрос. теперь более понятно

YSH 10.11.2022 11:45

Ну нет. Вы даже не включили код, в котором хотите хранить что-либо в БД. Вы также не включили код, связанный с IGroupDocument. Вы даже не включили то, что вообще нужно проверять. Нужно ли проверять, что какой-то параметр запроса является строкой, имеет определенную длину и т. д.?

Fabian Strathaus 10.11.2022 11:56

Спасибо за внимание! теперь более понятно?

YSH 10.11.2022 12:10
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
4
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете прочитать параметры запроса из объекта запроса следующим образом:

const { firstName, lastName, email } = req.query;

Затем вы можете передать эти параметры запроса в функцию создания документа, например:

GroupModel.create({firstName, lastName, email});

Проверка должна принимать участие в вашей схеме мангуста. Поскольку вы его не включили, я сам создал образец схемы:

  const groupSchema = new Schema({
    firstName: { type: String, required: true },
    lastName: { type: String, required: true},
    email: { type: String, required: true }
  })

Заметки:

  • Передача значений, которые используются для создания объекта в параметрах запроса, определенно является плохой практикой. Вы должны передать их как тело запроса в запросе POST.
  • Вы не можете вызвать res.send('${req.query.name} created') сразу после вызова функции create. Это возвращает обещание, которое следует ожидать. Вы можете просто использовать await GroupModel.create(...) и определить функцию как async.
  • Вы включили req.query.name в свой ответ, который является параметром запроса, который даже не использовался раньше. Вероятно, вам следует использовать свойство из значения обещания awaited.

Другие вопросы по теме