如何在Node.js中通过Mongoose连接通过两个回调调用创建的字符串?

奥拉沃·亚历山大(Olavo Alexandrino)

我有两个相互关联的模型。如果成功删除了第一个模型的mongo文档,则必须删除其父文档。

是否尝试执行第二次删除时可能会引发异常。有错误或没有错误,我想将第一条消息和第二条消息连接起来,但是“ findOneAndDelete”内部的“ message”变量的范围与其父级不同。

如何完成这项要求?

除了仅传递主消息外,以下代码段均能正常工作。

    var id = req.params.id;
    var valid = mongoose.Types.ObjectId.isValid(id);

    if (valid) {

        MyModel
        .findByIdAndDelete({"_id": id})
        .exec(function (err, result) {
            var message = "Item has been removed successful.";
            if (!result) {
                message = "Error at deleting an about item.";
            } else {

                // finding and deleting related about image item
                var query = { "id": id };

                SecondModel
                    .findOneAndDelete(query).exec(function (err, result) {

                    // deletion is OK, but the concatenation does not work
                    // how to return this "message" scope to its parent?

                    message += " Image item has been removed successful.";
                    if (!result) {
                        message += " Error trying to remove about image item.";
                    }

                });

            }

            // the concatenation should be returned here

            responseUtilities.sendJsonResponse(res, err, {"message": message});
        });
    } else {
        responseUtilities.sendJsonResponse(res, false, { "message": "Item id is not valid." });
    }



名称

很高兴您找到了答案。这里有一些结构和样式方面的想法,它们使该代码更易于阅读(以后由您或由同事阅读),并使调试和扩展更加容易。首先为两个异步操作构建小的,返回承诺的函数。

function deleteAboutWithId(id) {
  return new Promise((resolve, reject) => {
    AboutModel.findByIdAndDelete({"_id": id}).exec(function (err, result) {
      err ? reject(err) : resolve(result)
    })
  })
}

function deleteImageWithAboutId(id) {
  return new Promise((resolve, reject) => {
    AboutImageModel.findOneAndDelete({ aboutId: id }).exec(function (err, result) {
      err ? reject(err) : resolve(result)
    })
  })
}

这些的一个很好的好处是可以对它们进行单元测试,重用,推广等。另一个好处是使用它们可以使您的业务逻辑清晰明了。该代码读取了您向同事描述该功能的方式。

  • 删除项目
  • 删除图片
  • 如果两个都成功,则回答复合成功消息
  • 如果任何一个失败,请回答(可能)复合错误消息

公共职能:

const msgIdError = 'About item id is not valid.'
const msgItemSuccess = 'About item has been removed successful.'
const msgImageSuccess = ' Its image item has also been removed successful.'
const msgItemError = 'Error at deleting an about item.'
const msgImageError = ' Error trying to remove about image item.'

module.exports.delete = function (req, res) {
  const idAbout = req.params.idAbout
  if (!mongoose.Types.ObjectId.isValid(idAbout)) {
    responseUtilities.sendJsonResponse(res, false, { "message": msgIdError })
  }
  let message = ''
  deleteAboutWithId(idAbout).then(() => {
    message += msgItemSuccess
    return deleteImageWithAboutId(idAbout)
  }).then(() => {
    message += msgImageSuccess
    responseUtilities.sendJsonResponse(res, err, { "message": message })
  }).catch(err => {
    // if message is empty, the first block threw the error
    message += message.length ? msgImageError : msgItemError
    responseUtilities.sendJsonResponse(res, err, { "message": message });
  })
}

几个简短的注意事项:(1)最好将字符串移开。可能有一天会将它们保留在config中,翻译成其他语言,等等。(2)它会稍微清理代码以检查顶部的无效输入,如果输入无效,则在顶部纾困

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js-如何通过回调调用异步函数?

来自分类Dev

如何通过mongo .find调用在Node.js中执行此回调调用

来自分类Dev

如何通过串联两个字符串在Shell脚本中调用别名?

来自分类Dev

如何在Dart中通过将字符串与数字连接来动态调用数组

来自分类Dev

如何通过一个相似的字符串合并两个txt文件

来自分类Dev

如何通过比较两个文件来grep相同的字符串

来自分类Dev

如何通过两个不同的拆分选项提取字符串?

来自分类Dev

如何在两个文件中匹配字符串并替换字符串?

来自分类Dev

如何连接两个单独的字符串

来自分类Dev

如何通过连接 PostgreSQL 中的两个表来创建视图?

来自分类Dev

如何在同一行中使两个回显字符串?

来自分类Dev

如何在Node js中创建图像?

来自分类Dev

如何连接两个JSX片段或变量或字符串和组件(在Reactjs中)?

来自分类Dev

如何在python中的字符串中搜索两个连续的字符

来自分类Dev

如何在Excel或Linux中通过重叠名称连接两个变量

来自分类Dev

如何在Spring Expression Language(SpEL)中连接两个字符串

来自分类Dev

如何在jexl中连接两个数字字符串?

来自分类Dev

如何在Spring Expression Language(SpEL)中连接两个字符串

来自分类Dev

如何通过Node Js分割字符串?

来自分类Dev

如何通过Windows命令提示符和C#在一个字符串中更改两个项目

来自分类Dev

如何在模板方法模式中通过两个名称调用模板方法

来自分类Dev

如何在JavaScript中的两个相同字符之间获取子字符串?

来自分类Dev

Lua:如何在字符串中两个或多个重复字符之间放置内容?

来自分类Dev

如何在文件中以两个特定字符开头和结尾的字符串grep?

来自分类Dev

如何在JavaScript中的两个特定字符之间获取很多字符串

来自分类Dev

如何在字符串的两个相同字符之间获取字符串-在vb.net中

来自分类Dev

如何在Matlab中检测字符串中的两个选项卡

来自分类Dev

如何在Groovy中通过字符串名称调用构造函数

来自分类Dev

如何在一个Nginx配置中设置两个Node.js应用

Related 相关文章

  1. 1

    Node.js-如何通过回调调用异步函数?

  2. 2

    如何通过mongo .find调用在Node.js中执行此回调调用

  3. 3

    如何通过串联两个字符串在Shell脚本中调用别名?

  4. 4

    如何在Dart中通过将字符串与数字连接来动态调用数组

  5. 5

    如何通过一个相似的字符串合并两个txt文件

  6. 6

    如何通过比较两个文件来grep相同的字符串

  7. 7

    如何通过两个不同的拆分选项提取字符串?

  8. 8

    如何在两个文件中匹配字符串并替换字符串?

  9. 9

    如何连接两个单独的字符串

  10. 10

    如何通过连接 PostgreSQL 中的两个表来创建视图?

  11. 11

    如何在同一行中使两个回显字符串?

  12. 12

    如何在Node js中创建图像?

  13. 13

    如何连接两个JSX片段或变量或字符串和组件(在Reactjs中)?

  14. 14

    如何在python中的字符串中搜索两个连续的字符

  15. 15

    如何在Excel或Linux中通过重叠名称连接两个变量

  16. 16

    如何在Spring Expression Language(SpEL)中连接两个字符串

  17. 17

    如何在jexl中连接两个数字字符串?

  18. 18

    如何在Spring Expression Language(SpEL)中连接两个字符串

  19. 19

    如何通过Node Js分割字符串?

  20. 20

    如何通过Windows命令提示符和C#在一个字符串中更改两个项目

  21. 21

    如何在模板方法模式中通过两个名称调用模板方法

  22. 22

    如何在JavaScript中的两个相同字符之间获取子字符串?

  23. 23

    Lua:如何在字符串中两个或多个重复字符之间放置内容?

  24. 24

    如何在文件中以两个特定字符开头和结尾的字符串grep?

  25. 25

    如何在JavaScript中的两个特定字符之间获取很多字符串

  26. 26

    如何在字符串的两个相同字符之间获取字符串-在vb.net中

  27. 27

    如何在Matlab中检测字符串中的两个选项卡

  28. 28

    如何在Groovy中通过字符串名称调用构造函数

  29. 29

    如何在一个Nginx配置中设置两个Node.js应用

热门标签

归档