【问题标题】:How to handle DB error in node mongoDB query?如何处理节点 mongoDB 查询中的数据库错误?
【发布时间】:2021-04-20 04:36:13
【问题描述】:

我在节点中有一个代码-这样的sails js mongo db代码,用于用户注册: 注册fn:

try{
    let err;
    let user = await User.create({req.body}).fetch();
    if (!user){
      throw new Error('Failed');
    }
    res.status(200).json({user});
  }catch(e){
    res.status(500).json({e.message});
  }
};

req.body:

{

    "firstName": "jay", // required
    "lastName": "Thomas", 
    "email":"yo@gmail.com", // required and unique
    "password": "X12345678", // required
    "languages":["c++", "english"]
}

如果我拼错了email to emal,,它应该通过一个数据库错误来发送响应,但它也会在控制台上显示错误,这是我不想要的。我只希望它发送错误作为响应。 为此我需要进行哪些更改?

【问题讨论】:

  • 你指的是哪个控制台——浏览器端还是服务器端?
  • 服务器端控制台
  • 目前我通过手动提取 req.body 字段并验证它们来实现这一点,从而捕获错误并发送响应。如果您有更好的解决方案,请告诉我。

标签: node.js mongodb sails.js sails-mongo


【解决方案1】:

我可以建议 Sails 提供开箱即用的内置响应,而不是使用 res.status 吗? Sails 通过内置的响应函数(例如return res.serverError(err)return res.badRequest(err))很好地处理响应。

如果您查看您的 /api/responses 路径,您应该会看到一个名为“serverError.js”的文件 - 它与您的 500 状态代码响应相匹配。

https://github.com/balderdashy/sails/blob/master/lib/hooks/responses/defaults/serverError.js

在这个文件中(我在 Sails.js 最新版本的第 35 行)有这一行:

// Log error to console
sails.log.error('Sending 500 ("Server Error") response: \n', flaverr.parseError(data) || data);

这表示打算将任何错误记录到控制台或默认文件中,这是错误记录的最佳实践。

如果您需要忽略错误,可以编辑这些响应文件以删除默认控制台日志记录,将日志级别更改为忽略错误(不推荐),或者尝试拦截它们并以自己的方式优雅地处理它们,可以在这个地方看到这样做的方法:

https://sailsjs.com/documentation/concepts/models-and-orm/errors#?negotiating-errors-with-await

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多