将每个对象中的值映射为新的一系列键值对(Moongoose 验证错误到 Vee Validate 字段验证消息)

Map values in each object to be new series of key value pairs (Moongoose validation error to Vee Validate field validation message)

我正在尝试将 Validation from Mongoose 的错误消息转换为 Vee Validate 的可读数据。

在这种情况下,我使用 mongoose unique validator 强制使用唯一电子邮件。我在这个电子邮件示例中得到了这个错误并得到以下信息:

{
 email: {
  kind: "unique",
  path: "email",
  message: "Email address seems to already exist",
  path: "email",
  type: "unique",
  value: "email@email.com",
 }
}

我 return 这是 json 错误数据,我将其添加到 Vee Validate using setErrors

所以在这种情况下,我希望对象变成:

{
  email: ['Email address seems to already exist']
}

所以我想将一个对象映射到另一个对象,同时仍然允许存在多个错误字段,以防存在前端无法覆盖的更多服务器端验证。

我对改变验证错误对象本身的解决方案持开放态度,但我还没有发现任何对 moongoose 验证有用的东西。

如果你想把{email: {message: "email error"}, password: {message: "password error"}}转换成{email: ["email error"], password: ["password error"]}

你可以使用reduce函数(用Object.keys转换成数组):

const data = {
  email: {
    message: "Inavlid email"
  },
  username: {
    message: "Inavlid username"
  },
  password: {
    message: "Inavlid password"
  }
};

const transformed = Object.keys(data).reduce((acc, k) => {
  return {
    [k]: [data[k].message],
    ...acc
  };
}, {});

console.log(transformed)
// transformed = {email: ["Invalid email"], username: ["Invalid username"], password: ["Invalid password"]};