ActionCable - 响应错误

Posted

技术标签:

【中文标题】ActionCable - 响应错误【英文标题】:ActionCable - Respond With Error 【发布时间】:2016-10-04 19:15:08 【问题描述】:

使用 ActionCable,我如何在从客户端接收数据后以错误响应?

例如,当客户端无法通过身份验证时,ActionCable 会抛出UnauthorizedError,它会以 404 响应。我想以 422 响应,例如,当客户端发送的数据无效时。

【问题讨论】:

***.com/q/39650446/5381547 的可能副本 【参考方案1】:
ActionCable.server.broadcast "your_channel", message: data: data, code: 422

然后在your.coffee文件中:

received: (res) ->
  switch res.code
    when 200
      # your success code
      # use res.data to access your data message
    when 422
      # your error handler

【讨论】:

【参考方案2】:

据我所知,没有“Rails 方式”可以做到这一点,@Viktor 给出的答案似乎是正确的。综上所述:保证所有消息都广播有数据和代码,然后在客户端通过代码切换。

有关更现代的 ES6 示例,请参见下文:

在轨道上:

require 'json/add/exception'

def do_work
  // Do work or raise
  CampaignChannel.broadcast_to(@campaign, data: @campaign.as_json, code: 200)
rescue StandardError => e
  CampaignChannel.broadcast_to(@campaign, data: e.to_json, code: 422) # Actually transmitting the entire stacktrace is a bad idea!
end

在 ES6 中:

campaignChannel = this.cable.subscriptions.create( channel: "CampaignChannel", id: campaignId , 
  received: (response) => 
    const  code, data  = response

    switch (code) 
      case 200:
        console.log(data)
        break
      default:
        console.error(data)
    
  
)

【讨论】:

以上是关于ActionCable - 响应错误的主要内容,如果未能解决你的问题,请参考以下文章

Redis导致Action Cable错误,本地服务器被自动关闭

Heroku 上的 ActionCable 服务器响应时间

ActionCable Rails 5 (Passenger) - 失败:WebSocket 握手期间出错:意外响应代码:404

子域而不是子目录上的 ActionCable

ActionCable 不尊重 production.rb 中的端口分配

Ruby on Rails 5 Action Cable:当前模型实例的流(基于 URL 的订阅)