如何处理Sails JS返回的验证消息?

问题描述 投票:1回答:1

希望你做得很好!

我正在使用SailsJS网络应用程序,并为控制器使用动作结构。

这是我的user/login操作:

  module.exports = {
    friendlyName: 'Login',

    description: 'Login user.',

    inputs: {
      email: {
        description: 'user email.',
        type: 'string',
        required: true
      },
      password: {
        description: 'user password.',
        type: 'string',
        required: true
      }
    },

    exits: {
      success: {
        statusCode: 200,
        responseType: 'view',
      },       
    },

    fn: async function (inputs, exits) {
      // All done.
      return 'hello world';
    }
  };

这是登录表单的html代码:

    <div class="row">
      <div class="valign-wrapper">
          <div class="col s6 z-depth-4 card-panel">
            <form class="col s12 login-form" method="POST" action="/login">
              <input type="hidden" name="_csrf" value="<%= _csrf %>" />
              <div class="card-content">
                <h5 class="card-title center-align">Login</h5>
                <div class="row margin">
                  <div class="input-field col s12">
                    <input id="email" type="email" class="validate">
                    <label for="email">Email</label>
                    <div class="invalid-feedback" v-if="formErrors.emailAddress">Please provide a valid email address.</div>
                  </div>
                </div>
                <div class="row margin">
                  <div class="input-field col s12 right">
                    <input id="password" type="password" class="validate">
                    <label for="email">Password</label>
                  </div>
                </div>
                <div class="row">
                  <button class="btn waves-effect waves-light right" type="submit" name="action">Login</button>
                </div>            
              </div>
            </form>
          </div>
        </center>
      </div>
    </div>

[每当我提交空白表格时,都会出现以下错误:

    {
      "code": "E_MISSING_OR_INVALID_PARAMS",
      "problems": [
        "\"email\" is required, but it was not defined.",
        "\"password\" is required, but it was not defined."
      ],
      "message": "The server could not fulfill this request (`POST /login`) due to 2 missing or invalid parameters.  **The following additional tip will not be shown in production**:  Tip: Check your client-side code to make sure that the request data it sends matches the expectations of the corresponding parameters in your server-side route/action.  Also check that your client-side code sends data for every required parameter.  Finally, for programmatically-parseable details about each validation error, `.problems`. "
    }

现在,问题是我无法找到更漂亮的方式来处理此错误。

我希望你们中的一个可以引导我走上正确的道路。

谢谢,

javascript validation sails.js
1个回答
0
投票

使用相同的错误对象显示将是一个错误,因为在生产中,技术错误将通过toJson方法消除。

处理错误的最佳方法是编写一个自定义错误。如

  module.exports = {
    friendlyName: 'Login',

    description: 'Login user.',

    inputs: {
      email: {
        description: 'user email.',
        type: 'string',
        required: true
      },
      password: {
        description: 'user password.',
        type: 'string',
        required: true
      }
    },

    exits: {
      success: {
        statusCode: 200,
        responseType: 'view',
      },
      badrequest:{
        statusCode: 400,
        responseType: 'view',
      }
    },

    fn: async function (inputs, exits) {
      try{
        // all good
        return exits.success({/* object containing information realted to success*/}) 
      }
      catch(e){
        if(e.code === "E_MISSING_OR_INVALID_PARAMS"){
         return exits.badrequest({code: e.code, message: 'Email/Password is missing'});
        }
        else{
         return exists.error(e);
        }
      }

    }
  };
© www.soinside.com 2019 - 2024. All rights reserved.