【问题标题】:Can i set required property in MongoDB to multi language我可以在 MongoDB 中将所需属性设置为多语言吗
【发布时间】:2019-08-19 07:13:43
【问题描述】:

我正在为 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"
  }
});

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案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 值。

    【讨论】:

    • 这完美运行我现在面临的另一个问题是当我尝试保存用户时如何传递参数语言例如: const newUser = await new User(req.body); newUser.save((err, result) => { if (err) { return res.status(400).json({ error: errorHandler.getErrorMessage(err) }); } res.status(200).json({ message: "注册成功!" }); });我需要在这里传递参数语言,以便以我想要的语言获取消息错误。感谢您的功能。
    • 而不是 req.body 传递给 new User(); let parameters = Object.create(req.body): parameters.lang = //这里传递你的语言;比你可以在你的模式模型中阅读它。
    • 以及如何在此处获取该参数:名称:{类型:字符串,修剪:true,必需:validationMessagesTranslation(“名称”,“此处语言参数”)},
    • 你的 UserModel 看起来像一个函数。 const UserModel = (user, lang) => { // 现在你有了这里的语言,你不需要再使用 Object.create 了,在你做的时候传递它 await new User(req,body, lang) return new Schema({ }) }
    • 如果更改模型如下: const UserSchema = lang => { return new Schema({ name: { type: String, trim: true, required: validationMessagesTranslation("name", "fr") } }) } 它抛出了这个错误:TypeError: UserSchema.pre is not a function
    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 2013-07-30
    • 2016-06-25
    • 2014-03-06
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多