问题标签 [plug]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
terminal - Phoenix:如何在控制台中获取 conn %Plug.Conn{}
后
我想在 iex 终端做一些快速测试,但是有些函数需要 struct %Plug.Conn{} 作为参数,例如我想得到表达式的结果:
但我有错误:
有没有一种在控制台中获取 conn struct 的简单方法?
elixir - Elixir 将参数传递到 Plug 以获取先前的 plug 参数
这可能不是 Breadcrumbable 问题,但是如何将先前插件中的参数传递到面包屑中?例如,如果之前的插件set_merchant
将商家设置为conn.params.merchant
,我如何将其传递id
给面包屑?
......
这conn.params.merchant_id
是我想从第一个插件传递参数的地方set_merchant
elixir - 为什么 Elixir Plug 使用宏将插件编译成 AST?
正如代码https://github.com/elixir-plug/plug/blob/v1.5.0/lib/plug/builder.ex#L183所示,插件定义将在宏扩展阶段编译为 AST。但为什么?为什么不只保留插件定义并使用Enum.reduce_while
或递归来一一调用插件?
http-headers - Elixir Plug 为特定文件配置
我通过以下方式plug
在我的模块中定义了一个:App.Endpoint
一切都按预期工作,只是没有申请这个插件/js/app.js
我目前不能只提供/js/app.js
,而是只能指定js
哪个将提供/js
目录中的所有文件。
如何仅指定此js/app.js
文件而不指定其他文件?
我努力了
但我总是收到 404/js/app.js
testing - 如何在 Phoenix 中测试使用 HEAD 的控制器方法
目前,文档中的常用HTTP
动词清晰且充满活力,但我们HEAD
今天开始实施一些路线,并且测试方式与其他路线不同。
测试说一个GET
方法:
conn = get conn, controller_path(conn, :controller_method, params)
因此,我假设您只是更改get
为head
,但事实并非如此。
这是我的路线:
template_journeys_count_path HEAD /v1/templates/:template_id/journeys GondorWeb.V1.JourneyController :count
和我的控制器方法:
def count(conn, %{"template_id" => template_id}) do
count = Templates.get_journey_count(template_id)
conn
|> put_resp_header("x-total-count", count)
|> send_resp(204, "")
end
和我的测试:
conn = head conn, template_journeys_count_path(conn, :count, template.id)
assert response(conn, 204)
但是我收到一条错误消息,说没有收到回复,并且resp_header
我添加了未添加的内容conn.resp_headers
我错过了什么吗?Plug.ConnTest
我还尝试使用将方法build_conn
传递给它的方法来建立连接HEAD
,但仍然没有运气。
elixir - 如何将流量从 Http 重定向到负载均衡器上用于 SSL 的 Phoenix Elixir 中的 Https?
我需要将流量从 Http 转发到 Https,SSL 在负载均衡器上,所以我需要做的就是使用我添加的plug_ssl
so转发标头:prod.exs
在我的prod.exs
并删除其他所有内容config :web, Web.Endpoint
它不起作用。
我究竟做错了什么?
我需要把force_ssl
我的router
?
先感谢您。
elixir - 如何为不同的控制器定义不同的文件上传限制?
我的 Phoenix 应用程序中有 2 个页面,它们需要不同的文件上传大小限制(一页可以使用默认的 8MB 限制,但第二页需要更高的限制)。
从文档中,我可以增加 MyApp.Endpoint 模块中的限制,如下所示:
但此设置是站点范围的。我尝试将整个解析器插件直接移动到控制器,但是在提交表单时出现错误
所以我假设在路由器之前需要解析器插件。我还尝试仅将 :multipart 解析器移动到控制器,但这会导致相同的错误。
有任何想法吗?
elixir - 在 Elixir/Phoenix 中解析多部分/混合请求的 json 部分
我正在编写一个 Elixir/Phoenix json API 后端,并希望一个端点在单个请求中接收多个图像文件以及一些 json 格式的属性。我为此使用了multipart/mixed
内容类型,这就是我的 cURL 请求的样子。
在我的控制器操作中,我收到了整齐解析的文件,但我的 json 部分未解析。
这是一个似乎相关的讨论,WIP: How to parse multipart form with JSON field #570。很明显,application/json
不应期望部件的解析会自动发生。相反,最后一条消息建议使用自定义正文阅读器来执行任何额外的解析。
这种解释是否正确,或者是否有另一种方法来处理multipart/mixed
有效负载,以便任何源自application/json
部件的参数都可以在已经解析的控制器操作中使用?
一个侧面问题
让我感到困惑的是,上面的解析发生了,我什至不必使用Plug.Parsers
. 从我读到的内容来看,获取解析的多部分有效负载应该需要以下内容。
无论这个插头是否存在于管道中,我都会得到相同的结果。它可能默认存在,但我想确认一下。
我正在使用 Elixir 1.6.5、Phoenix 1.3.2 和 Plug 1.6.0。
json - 插件解析器:引发 ParseError
我正在编写一个插件解析器,其中包括使用 Poison 解码 JSON(我更愿意Plug.Parsers.JSON
这样做,但我需要读取原始请求正文以根据签名验证它,所以这是不可能的)。
我Poison.decode/2
用来解码json。{:error, ...}
这会在错误时返回一个元组。Plug.Parsers.ParseError
作为 Plug 解析器,我认为如果在解析过程中出现错误,我应该提出。但是ParseError
需要一个exception
结构。我没有其中之一,我只有从Poison.decode/2
.
作为一种解决方法,我可以使用 usePoison.decode!/2
和rescue
引发的错误,将其重新提升为 a ParseError
,但是当非提升decode/2
可用时,这似乎很奇怪。
所以我的问题是,越来越抽象:
- 如何在
ParseError
没有源异常的情况下从解析器引发? - 我需要提出
ParseError
,还是提出我自己的例外更好? - 有没有更好的方法,允许我在不重新实现 JSON 解析的情况下验证签名?