sails.js 服务中的水线错误实施

Waterline Error implementation in sails.js Services

正如你们大多数人所知,sails.js 框架将错误作为 WLError 对象抛出,我想让它在我的应用程序中保持一致。我想在我的服务中提出的任何错误都应该是一个带有我自己的错误、状态和摘要的 WLError 对象。有没有人这样做过?

var error = new Error(errorMsg);
return error; 

我想要下面这样的东西...

var error = new WLError({"status":"Fail", "error": "somethig", "summary": "OOPS!!"}); 
return error; 

谢谢!

在我的一个适配器中,我使用水线错误


    // Adjust the relative path as needed
    var WLError = require('../../sails/node_modules/waterline/lib/waterline/error/WLError');

    processError: function(error) {
      var formattedErr = new WLError();
      formattedErr.code = 'E_MY_ERROR';
      formattedErr.status = 400;
      formattedErr.reason = error;
      formattedErr.details = error;
      return formattedErr;
    },

我也做了相反的事情,将水线错误转换为看起来像其他风帆错误

在api/responses/badRequest.js中我添加了:


      // If the user-agent wants JSON, always respond with JSON
      if (req.wantsJSON) {
        try {
          // This formats waterline errors like other sails errors
          // See WLError.prototype.toJSON in waterline/error/WLError.js
          var WLResponse = data.toJSON();
          if(WLResponse.hasOwnProperty('error') && WLResponse.hasOwnProperty('summary')) {
            return res.jsonx({
              code: WLResponse.error,
              message: WLResponse.summary
            });
          } else {
            // Not a waterline error
            throw 'NonWLError';
          }
        } catch (e) {
          return res.jsonx(data);
        }
      }

我这样做了...

我在下面添加了 bootstrap.js

sails.WLError = require('../node_modules/sails/node_modules/waterline/lib/waterline/error/WLError.js');

那么在我的代码中不需要做一个"require"。就在线条下方。

error = new sails.WLError();
error.code = "404";
error.status = "Failure";
error.summary = "Invalid Request";
error.details = errorMsg;