Могу ли я установить для требуемого свойства в MongoDB значение multi language

#node.js #mongodb #express #mongoose

#node.js #mongodb #выразить #mongoose

Вопрос:

Я создаю схему для пользователей в MongoDB, и проблема, с которой я сталкиваюсь здесь, заключается в том, что веб-приложение будет многоязычным, что означает, что я выполняю проверку в серверной части более конкретно в пользовательской схеме, поэтому в обязательном поле и уникальном я помещаю сообщение, если что-то пойдет не так, и это сообщение я показываю пользователям, поэтому, если пользователь использует приложение на другом языке, отсюда можно изменить сообщение и показать его.

Это схема, которую я использую:

 const UserSchema = new Schema({
  name: {
    type: String,
    trim: true,
    required: "Name is required"
  },
  surname: {
    type: String,
    trim: true,
    required: "Surname is required"
  },
  username: {
    type: String,
    trim: true,
    unique: "Username already exist",
    required: "Username is required"
  },
  email: {
    type: String,
    trim: true,
    unique: "Email already exists",
    match: [/. @. .. /, "Please fill a valid email address"],
    required: "Email is required"
  },
  password: {
    type: String,
    required: "Password is required"
  },
  role: {
    type: String,
    trim: true,
    required: "Role is required"
  }
});
  

Ответ №1:

 const validationMessagesTranslation = (field, lang) => {
  const validationMessages = {
    "en": {
      name: "Name is required",
      surname: "Surname is required"
    },
    "fr": {
      name: "Le nom est requis.",
      surname: "Le nom de famille est requis."
    }
  }
  return validationMessages[lang][field];
}  

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

Комментарии:

1. это работает отлично другая проблема, с которой я сталкиваюсь сейчас, заключается в том, как передать язык параметра, когда я пытаюсь сохранить пользователя, например, здесь: const newUser = ожидает нового пользователя (req.body); newUser.save((ошибка, результат) => { if (ошибка) { возвращает res.status(400).json ({ ошибка: ErrorHandler.getErrorMessage(ошибка) }); } res.status(200).json({ сообщение: «Успешно зарегистрирован!» }); }); мне нужно здесь передать paramater language, чтобы получить сообщение об ошибке на нужном мне языке. спасибо за функцию.

2. вместо req.body передачи новому пользователю(); пусть parameters = Object.create(req.body): параметры. lang = // здесь укажите ваш язык; Затем вы можете прочитать его в своей модели схемы.

3. и как получить его вот этот параметр: name: { type: String, trim: true, требуется: validationMessagesTranslation(«имя», «здесь параметр языка»)},

4. Ваша пользовательская модель может выглядеть как функция. const UserModel = (user, lang) => { // теперь у вас есть язык здесь, вам больше не нужно использовать Object.create, просто передайте его, когда вы выполняете await new User(req,body, lang) возврат новой схемы ({ }) }

5. если изменить модель следующим образом: const UserSchema = lang => { вернуть новую схему ({ name: { type: String, trim: true, требуется: validationMessagesTranslation(«name», «fr») } }) }, это выдает мне эту ошибку: TypeError: UserSchema.pre не является функцией