我正在使用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) 检查参数是保护子句中的列表列表还是键值对列表的最佳方法是什么?
我提出的解决方案只是抓住头部并进行检查,但我觉得必须有更好的方法.
def stuff(items) when is_list(hd(items)) do
something
end
Run Code Online (Sandbox Code Playgroud) 如何更改此代码以连接到不需要身份验证的通道,同时仍然允许在某些通道上进行身份验证?
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) 我正在阅读一本关于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)
这是否意味着有两个声明使用相同的方法名称,但它知道基于实现中的所有方法实现哪个?我的印象是第一个方法名称是"方法",其余的是该方法的参数.