所以我正在学习 Elixir 和 Pheonix 看起来太多而无法开始学习,所以我使用 Plug and Poison 制作了一个简单的 JSON Rest API,但要查看任何更改,我需要停止服务器并mix run --no-halt再次运行。我来自nodeJS,它只nodemon跟踪依赖于根模块的所有文件,并在看到任何更改时重新加载整个服务器。有没有类似的 mix 或 Elixir 的东西?我知道您可以使用 OTP 重新加载代码的特定部分,如果我的服务器在保存时执行此操作,那就最好了,但现在我只想更快地响应我所做的事情。有人能指出我正确的方向吗?
使用{:typed_struct, "~> 0.2.1"}库我有以下结构:
defmodule RequestParams do
use TypedStruct
typedstruct do
field :code, String.t()
field :name, String.t()
end
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试将函数参数模式匹配到结构:
def do_handle(params %RequestParams{}, _context) do
# instead of
# def do_handle(%{ "code" => code, "name" => name}, _context) do
Run Code Online (Sandbox Code Playgroud)
但我得到例外:
Run Code Online (Sandbox Code Playgroud)cannot find or invoke local params/2 inside match. Only macros can be invoked in a match and they must be defined before their invocation.
怎么了?是否有可能将函数参数与结构相匹配?
我记得找到了一些可以让您将 DateTime 转换为“in 1 hour”之类的字符串的东西,但到目前为止我的搜索结果是空的。
我需要通过传递查询字符串来进入 api,以防路由是:
api/v1/servers/#{server_name}/zones
Run Code Online (Sandbox Code Playgroud)
查询参数rrsets=false和代码:
HTTPoison.get!("api/v1/servers/#{server_name}/zones")
Run Code Online (Sandbox Code Playgroud)
如何使用查询字符串发送?
有一个公共 API 可以在浏览器中完美运行并返回 JSON 响应,但使用最新版本的 Httpoision 它无法按预期工作:
HTTP(GET):https://yts.lt/api/v2/list_movies.json ?query_term=tt11296058
{:ok,
%HTTPoison.Response{
body: "",
headers: [
{"Date", "Tue, 22 Jun 2021 11:42:20 GMT"},
{"Transfer-Encoding", "chunked"},
{"Connection", "keep-alive"},
{"Cache-Control", "max-age=3600"},
{"Expires", "Tue, 22 Jun 2021 12:42:20 GMT"},
{"Location",
"https://yts.mx/api/v2/list_movies.json?query_term=tt11296058"},
{"cf-request-id", "0ad5205cb800004da508b04000000001"},
{"Expect-CT",
"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\""},
{"Report-To",
"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v2?s=O80%2B5KfZ6d3G3Fz0NBGlep%2BetzQAvaUDIvVW09DUB2QMtJpd1XxupK621LhGR8EqiOsOY%2B55BdaHAljyLCEumHyb0rHSqk526jMQ5NxuLUi%2FVdbX\"}],\"group\":\"cf-nel\",\"max_age\":604800}"},
{"NEL", "{\"report_to\":\"cf-nel\",\"max_age\":604800}"},
{"Server", "cloudflare"},
{"CF-RAY", "663536745c654da5-BOM"},
{"alt-svc",
"h3-27=\":443\"; ma=86400, h3-28=\":443\"; ma=86400, h3-29=\":443\"; ma=86400, h3=\":443\"; ma=86400"}
],
request: %HTTPoison.Request{
body: "",
headers: [],
method: :get,
options: [],
params: %{},
url: "https://yts.lt/api/v2/list_movies.json?query_term=tt11296058"
},
request_url: "https://yts.lt/api/v2/list_movies.json?query_term=tt11296058",
status_code: 301 …Run Code Online (Sandbox Code Playgroud) 我有一个列表如下
[
%Photos{
url: "http://localhost:4000/test/img",
user: "localhost:4000/test/img/123"}]
Run Code Online (Sandbox Code Playgroud)
如何获得"localhost:4000/test/img/123"字符串形式的结果?
谁能帮我这个?
提前致谢。
如何nil在 Elixir 中安全地串联列表?
我已经提供了一些情况和响应的内联示例++
看起来nil在连接时被视为一个特殊实体。
为什么会出现这种情况?
\n# Append two empty list \xe2\x9c\x85\niex(1)> [] ++ []\n[]\n# Append empty list to nil \xe2\x9d\x8c\niex(2)> [] ++ nil\nnil # Result should be []\n# Append non empty list to nil \xe2\x9d\x8c\niex(3)> [1] ++ nil\n[1 | nil] # Result should be [1]\n# Append non empty list to nil and enumerate \xe2\x9d\x8c\niex(5)> a = [1, 2] ++ nil\n[1, 2 | nil]\niex(6)> Enum.each(a, fn p -> IO.puts(p) end)\n1\n2\n** (FunctionClauseError) …Run Code Online (Sandbox Code Playgroud) 当我“sha256”时,Erlang 返回的结果与 bash 命令不同。
echo a | sha256sum, returns: 87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7 -
Run Code Online (Sandbox Code Playgroud)
埃尔兰
Bin = crypto:hash(sha256, "a").
<<202,151,129,18,202,27,189,202,250,194,49,179,154,35,220,
77,167,134,239,248,20,124,78,114,185,128,119,133,175,
238,72,187>>
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的二进制到十六进制, 但没有一个给出我期望的结果。
我得到这个结果:
bin_to_hex:bin_to_hex(Bin).
<<"CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB">>
Run Code Online (Sandbox Code Playgroud) list1 = [2,3,4]
map22 = MapSet.new()
map22 = MapSet.put(map22,25)
for i <- list1 do
map22 = MapSet.put(map22,i)
end
IO.puts("The updated map is #{inspect(map22)}")
Run Code Online (Sandbox Code Playgroud)
当我运行上面的程序时,我发现 for 循环中的更新根本不起作用。为什么会这样呢?
我在 Elixir 中有一个非常简单的应用程序,它使用 Ecto 在 Postgres 上的表中运行 SELECT 查询。\n表名称是“person”,有 2 列:“name”和“age”。
\n这是应用程序:
\n/ecto_app\n |-application.ex\n |-repo.ex\nRun Code Online (Sandbox Code Playgroud)\n应用程序.ex:
\ndefmodule EctoApp.Application do\n\n use Application\n\n require Logger\n\n @impl true\n def start(_type, _args) do\n children = [\n EctoApp.Repo\n ]\n\n opts = [strategy: :one_for_one, name: EctoApp.Supervisor]\n Logger.debug("Starting Ecto App")\n Supervisor.start_link(children, opts)\n end\nend\nRun Code Online (Sandbox Code Playgroud)\n回购协议:
\ndefmodule EctoApp.Repo do\n use Ecto.Repo,\n otp_app: :ecto_app,\n adapter: Ecto.Adapters.Postgres\n\n import Ecto.Query\n\n require Logger\n\n\n def get_people() do\n query = from p in "person",\n select: [p.name, p.age]\n result= EctoApp.Repo.all(query)\n …Run Code Online (Sandbox Code Playgroud) elixir ×10
httpoison ×2
cryptography ×1
ecto ×1
elixir-mix ×1
erlang ×1
erlang-otp ×1
list ×1
plug ×1
postgresql ×1
redirect ×1
sha256 ×1
struct ×1
unit-testing ×1