小编hum*_*ger的帖子

使用Poison将映射编码到JSON以与Slack一起使用

我正在使用Poison将地图编码为JSON,并将其发送到Slack API.这就是Poison给我的东西:

"{\"text\":\"changed readme fad996e98e04fd4a861840d92bdcbbcb1e1ec296\"}"
Run Code Online (Sandbox Code Playgroud)

当我把它放入JSON lint时,它说它是有效的JSON,但是Slack响应"无效的有效载荷".

如果我将JSON更改为这样

{"text":"changed readme fad996e98e04fd4a861840d92bdcbbcb1e1ec296"}
Run Code Online (Sandbox Code Playgroud)

然后它工作.有谁知道我在哪里出错?我是否需要对编码的JSON进行额外处理,或者是否需要设置一些标头?

这是我的控制器

def create(conn, opts) do
    message = Message.create_struct(opts)
    response = Slack.Messages.send(message)

    case response do
      {:ok, data} ->
        render conn, json: Poison.encode!(data)
      {:error, reason} ->
        render conn, json: reason
    end
end
Run Code Online (Sandbox Code Playgroud)

这是发送消息的库的一部分

defmodule Slack.Messages do

  def format_simple_message(map) do
    text = map.description <> " " <> map.commits
    message = %{text: text}
  end

  def post_to_slack(map) do
    Slack.post(:empty, map)
  end

  def send(map) do
    map
    |> format_simple_message
    |> post_to_slack
  end

end
Run Code Online (Sandbox Code Playgroud)

我的HTTPoison处理

defmodule …
Run Code Online (Sandbox Code Playgroud)

elixir slack-api elixir-poison

10
推荐指数
1
解决办法
5160
查看次数

检查Elixir的保护条款中的列表是否列出

检查参数是保护子句中的列表列表还是键值对列表的最佳方法是什么?

我提出的解决方案只是抓住头部并进行检查,但我觉得必须有更好的方法.

def stuff(items) when is_list(hd(items)) do
    something
end
Run Code Online (Sandbox Code Playgroud)

elixir

1
推荐指数
1
解决办法
767
查看次数

仅在加入 Phoenix 时验证某些频道

如何更改此代码以连接到不需要身份验证的通道,同时仍然允许在某些通道上进行身份验证?

phoenix.js:701 WebSocket 连接到“ws://localhost:4000/socket/websocket?token=&vsn=1.0.0”失败:WebSocket 握手期间出错:意外的响应代码:403

用户套接字.ex

defmodule App.UserSocket do
  use Phoenix.Socket

  ## Channels
  channel "collection:*", App.CollectionChannel

  ## Transports
  transport :websocket, Phoenix.Transports.WebSocket
  # transport :longpoll, Phoenix.Transports.LongPoll

  # Socket params are passed from the client and can
  # be used to verify and authenticate a user. After
  # verification, you can put default assigns into
  # the socket that will be set for all channels, ie
  #
  #     {:ok, assign(socket, :user_id, verified_user_id)}
  #
  # To deny connection, return `:error`.
  #
  # See …
Run Code Online (Sandbox Code Playgroud)

elixir phoenix-framework phoenix-channels

1
推荐指数
1
解决办法
1354
查看次数

使用相同的方法实现两次声明

我正在阅读一本关于iOS编程的书,并且遇到了一些令人困惑的事情.

从我到目前为止所学到的,实现中的方法就是这样的

- (return type)methodName: (return type)parameter methodName2:(return type)parameter
Run Code Online (Sandbox Code Playgroud)

但为什么你会两次使用同一个方法实现?像这样:

- (return type)methodName: (return type)parameter methodName2:(return type)parameter
{
// Code here
}
- (return type)methodName: (return type)parameter methodName3:(return type)parameter {
// Code here
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着有两个声明使用相同的方法名称,但它知道基于实现中的所有方法实现哪个?我的印象是第一个方法名称是"方法",其余的是该方法的参数.

objective-c ios

0
推荐指数
1
解决办法
68
查看次数