#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 не является функцией