Sails在机器出口(https://github.com/balderdashy/sails-docs/issues/910)的请求正文中返回HTTP响应的名称:
exits: {
emailAlreadyInUse: {
statusCode: 409,
description: 'The provided email address is already in use.'
}
}
这在响应的标题中给出了错误响应:
X-Exit →emailAlreadyInUse
X-Exit-Description →The provided email address is already in use.
如何在普通的JSON响应中返回这些值,使其与其他类似如下的响应一致:
答案 0 :(得分:1)
在出口处,您可以包括“响应类型”,该类型允许您在航行中设置自定义响应。
exits: {
emailAlreadyInUse: {
statusCode: 409,
responseType: 'jsonResponse',
description: 'The provided email address is already in use.'
}
}
接下来,您可以在api / responses中创建自定义响应,并以自己喜欢的方式进行设置。
module.exports = function jsonResponse() {
let req = this.req;
let res = this.res;
sails.log.verbose('Ran custom response: res.jsonResponse()');
/* DO WHATEVER YOU WANT TO DO */
return res;
}
答案 1 :(得分:1)
如果找不到解决方案,请直接在响应中发送文本:
return this.res.json('Hello World!');
答案 2 :(得分:0)
您可以在操作上使用 try/catch 块,并在 catch 块中检查 error.code
并返回所需的 JSON 响应。例如。你有:
fn: async function ({name, email, password}, exits) {
try {
const user = await User.create({
name,
email,
password
})
.fetch()
return exits.success({success: true, user})
} catch (error) {
if (error.code === 'E_UNIQUE') {
return exits.emailAlreadyInUse({success: false, message: 'The provided email is already in use by a switter user.'})
} else if (error.name === 'UsageError') {
return exits.badRequest({ success: false, message: 'Missing or invalid parameter')
}
}
}
出口的描述大多是针对响应头的。因此,您必须以与设置成功退出的值相同的方式设置要发回的值。
不要那样触发 else if
块,您的水线模型应该有一些验证,例如 required: true
、isEmail: true
左右,并且您的操作输入不应该有 {{1}因为这将在您的操作代码运行之前进行验证,使 Sails 发送无效或缺失参数的默认响应。