我已经创建了许多错误处理程序来处理MongoDB错误,其中一个是用于处理重复数据的:

const dbDuplicateKeyHandler = (error) => {
  console.log(error);   
  
  console.log(error.keyPattern.name);
  
  // const message = `Duplicated field value: (${error.keyValue.name}) Please use another value .`;
  
  return new AppError(400, `Duplicated field value: (${error.keyValue.name}) Please use another value .`); 

问题是,当我试图插入一个重复的用户名时,错误消息会按照我希望的那样打印出来,但如果我try 使用一个新的用户名但重复的邮箱,error.keyValue.name将是undefined.当我构建API时,处理程序在Postman中工作正常.我还搜索了解释MongoDB错误的文档,但没有找到任何错误. 我在控制台上记录了这两种情况下的错误

console.log("THE ERROR IS ==>",error);   
console.log("error.keyPattern.name IS ==> ",error.keyPattern.name);
console.log("error.keyValue.name IS ==> ",error.keyValue.name);

对于重复的用户名:

enter image description here

对于重复的邮箱:

enter image description here

推荐答案

对于您使用的邮箱,请执行以下操作:

error.keyPattern.name
error.keyValue.name

但它应该是:

error.keyPattern.email
error.keyValue.email 

您会得到undefined,因为没有名为namekeyPatternkeyValue的属性.

为了一致性,而不是error.keyValue.name%或error.keyValue.email%,您可以只做以下操作:

console.log("error.keyPattern IS ==> ", Object.entries(error.keyPattern)[0]);
console.log("error.keyValue IS ==> ", Object.entries(error.keyValue)[0]);

//Prints
error.keyPattern IS ==> ["name", 1]
error.keyValue IS ==> ["name", "username"]

error.keyPattern IS ==> ["email", 1]
error.keyValue IS ==> ["email", "username@example.com"]

Node.js相关问答推荐

可以删除一个mongodb catch块

需要关于基于角色授权的设计建议

npm错误;无法解析依赖项:npm ERR!对等webpack@;5.x.x;来自@webpack-cli/serve@2.0.5";

Inno Setup如何在现有文本文件中追加新内容

PEAN auth 应用程序:为什么 Angular 拦截器总是使用BehaviorSubject 返回 null(即初始值),而不是更新后的值?

在生产环境中,Nest实例启动时抛出不完整的导入错误

使用 Nodejs 获取 Firebase 云消息传递历史记录

如何防止 Chrome 通过 Selenium 崩溃?

在express js模型中将js转换为Typescript 时Typescript 错误

Mongoose,如何一次更新多个?

cURL 和 shell 任务

如何在 mongoDB 中进行全动态搜索?

如何使用 mocha.js 模拟用于单元测试的依赖类?

使用 Socket.io 将客户端连接到服务器

npm publish 导致'错误:EPERM:不允许操作,取消链接...',errno -4048

我可以在 Heroku 中运行咖啡脚本吗?

为什么我们要为 Angular 2.0 安装 Node.js?

如何使用 Node.js 在服务器端管理多个 JS 文件

__dirname 未在 Node 14 版本中定义

使用 Node-sass 缩小 CSS