如何使计算机退出响应返回JSON?

时间:2018-07-08 11:58:50

标签: sails.js

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响应中返回这些值,使其与其他类似如下的响应一致:

enter image description here

3 个答案:

答案 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: trueisEmail: true 左右,并且您的操作输入不应该有 {{1}因为这将在您的操作代码运行之前进行验证,使 Sails 发送无效或缺失参数的默认响应。