Javascript 如何处理Sails JS返回的验证消息?
希望你做得很好 我正在开发SailsJS web应用程序,并使用控制器的操作结构 这是我的Javascript 如何处理Sails JS返回的验证消息?,javascript,validation,sails.js,Javascript,Validation,Sails.js,希望你做得很好 我正在开发SailsJS web应用程序,并使用控制器的操作结构 这是我的用户/登录操作: module.exports = { friendlyName: 'Login', description: 'Login user.', inputs: { email: { description: 'user email.', type: 'string', required: true
用户/登录
操作:
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>
现在的问题是,我找不到一种更漂亮的方法来处理这个错误
我希望你们中的一位能指引我走上正确的道路
谢谢,使用相同的错误对象来显示将是一个错误,因为生产中的技术错误将通过toJson方法去除 处理错误的最佳方法是编写自定义错误。比如
module.exports = {
friendlyName: 'Login',
description: 'Login user.',
inputs: {
email: {
description: 'user email.',
type: 'string'
},
password: {
description: 'user password.',
type: 'string'
}
},
exits: {
success: {
statusCode: 200,
responseType: 'view',
},
badrequest:{
statusCode: 400,
responseType: 'view',
}
},
fn: async function (inputs, exits) {
try{
if(!inputs.email || !inputs.password){
return exits.badrequest({code: 'PARAM_MISSING', message: 'Email/Password is missing'});
}
// all good
return exits.success({/* object containing information realted to success*/});
}
catch(e){
return exists.error(e);
}
}
}
};
您可以转换api/responses/badRequest中的错误
module.exports = async function badRequest(data) {
const status = 400;
if (data.code && data.code === 'E_MISSING_OR_INVALID_PARAMS'){
return this.res.status(status).json({
code: 'My code',
message: 'My message',
whateva: 'Bla bla'
});
}
return this.res.status(status).json(data);
};
我有一个自定义项目,我需要你要求的相同的东西。我制作了一个npm包,它接受了一个错误对象,使前端更美观。大概是这样的:
module.exports = async function badRequest(data) {
const formatError = require('myFormatError');
const {status, response}= formatError(data);
return this.res.status(status).json(response);
};
它不需要是npm,你可以做一些功能。我希望你正在寻找它。我创建了一个钩子,可以解析这样的错误,并通过调用函数
sails.hooks.error.humanize(err)
向控制器中的响应添加一条可读的errorMessage
。如果你愿意,我可以分享代码。您使用的是哪个版本的sails(它支持钩子吗)?我使用的是最新版本,1.0感谢您的努力,但讽刺的是,代码从未进入fn:async function
,它甚至在进入之前就抛出错误。@BlueSuiter感谢您指出这一点。我能想到的唯一解决方案是删除所需的参数并手动测试它。否则,我认为您必须在视图本身中处理错误和消息。我已经根据它修改了代码。这意味着提供必需的参数只是为了愚弄开发人员。没用吗?@BlueSuiter帆船队有很多错误的决定。我认为,这只有在使用它返回JSON响应时才有用。作为API服务。感谢您的努力。您的代码片段处理得非常好。但是,我们可以将这些错误传递回视图吗?如果是,那么我们如何实现这一点呢?当然,您可以使用returnres.view('pathToView',{error:response})。但您需要处理视图中的错误对象。我建议您对表单u发送进行一些客户端验证。
module.exports = async function badRequest(data) {
const formatError = require('myFormatError');
const {status, response}= formatError(data);
return this.res.status(status).json(response);
};