gpt4 book ai didi

node.js - Node.js更新文档失败时,最好抛出异常或返回信息吗?

转载 作者:行者123 更新时间:2023-12-03 07:48:29 24 4
gpt4 key购买 nike

我在node.js,express, Mongoose 应用程序的服务层的类中有一个updateDocument方法。我想知道处理更新方法未更新文档的情况的最佳做法是什么,例如,如果传入了错误的ID。
版本1:如果更新失败,则返回一个带有success: false的对象:

  async updateDocument(id, updates) {
const output = await this.DocumentModel.updateOne({ _id: id }, updates);

let message = 'Something went wrong';
let success = false;
let updatedItem = null;
if (output.nModified) {
message = 'Successfully updated document.';
success = true;
updatedItem = await this.getDocument(id);
}

return { message, success, updatedItem};
}
版本2:如果更新失败,则抛出错误:
  async updateDocument(id, updates) {
const output = await this.DocumentModel.updateOne({ _id: id }, updates);

let updatedItem;

if (output.nModified) {
updatedItem = await this.getDocument(id);
} else{
throw new Error("The document wasn't updated")
}

return updatedItem;
}
当输入(例如错误的ID)不正确时,您是否总是抛出异常?还是可以返回有关更新成功与否的信息?作为node.js的新手开发人员,我不确定我是否掌握了足够的知识来识别这两种方法的问题。

最佳答案

没有黄金的方法,只有导致健壮和易于维护的软件的原则。
通常,对于所有不在您控制范围内的错误(连接,磁盘空间,凭据等),您应该使用try-catch-statement。然后应尽快而不是在错误之前进行处理。原因是您经常不知道如何在较低层以适当的方式处理错误。
对于可能发生的逻辑“错误”(错误的输入格式,缺少的用户名,未知的选项等),应使用if语句或验证函数,如果未按预期进行操作则引发错误。
对于您的情况,您应该检查updateOnegetDocument方法是否会引发错误。如果是,则应使用try-catch-statement包装这些函数。
其他提示:

  • 您的代码的两个版本都不错。但是我更喜欢版本2,因为它更简洁。
  • 如果您确定总有一个output对象,则可以像这样破坏nModified属性:

  • const { nModified } = await this.DocumentModel.updateOne({ _id: id }, updates);
  • 如果使用否定的if语句,则可以减少缩进的深度,并且可以使用const变量:

  • if (!nModified) {
    throw new Error("The document wasn't updated")
    }

    const updatedItem = await this.getDocument(id);
  • 现在,您还可以直接返回this.getDocument(id),不再需要变量updatedItem
  • 您最终可以在 Controller 类中处理您的错误。
  • 您可以使用自定义错误类在整个应用程序中的错误处理和错误消息中保持一致。

  • 我希望这至少有帮助。
    引用文献
    这些是一些类似的问题,答案很好。但是您需要注意,因为许多代码示例都不在现代JavaScript中。
  • 关于错误处理与错误处理的优缺点的一般讨论。
    if-else-statement在这里完成:
    What is the advantage of using try {} catch {} versus if {} else {}
  • 在此线程中讨论Node.js中的
  • 错误处理:
    Node.js Best Practice Exception Handling
  • 关于node.js - Node.js更新文档失败时,最好抛出异常或返回信息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63970242/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com