问题标签 [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.
json - 防止 Plug.ErrorHandler 在回调后重新引发错误
背景
我有一个简单的 Plug 路由器,它带有一个接收 JSON 正文的 PUT 端点。要解析它,我正在使用Plug.Parsers。
问题
该Plug.Parsers
插件工作正常并将 json 放入其中conn.body_params
。但是,如果我收到的 JSON 格式错误,我的应用程序就会出现错误。为了防止这种情况,我正在使用Plug.ErrorHandler但由于它在之后重新引发错误,因此应用程序仍然会爆炸。
代码
这是我的路由器。
应该注意的是,实际上Products.process
不会(或不应该)跟注,因为Plug.Parsers
之前加注。
这是我的测试:
错误
正如您可能猜到的,我希望请求返回 400 和一个很好的错误消息。相反,我得到了这个:
当请求具有无效的 JSON 正文 (ApiTest) test/api_test.exs:157 ** (Plug.Parsers.ParseError) 格式错误的请求时,测试 PUT /cars 返回 400,引发 Jason.DecodeError 异常,并显示消息“意外结束于位置 10” 代码:conn = Api.call(conn, @opts) stacktrace: (plug 1.10.4) lib/plug/parsers/json.ex:88: Plug.Parsers.JSON.decode/2 (plug 1.10.4 ) lib/plug/parsers.ex:313: Plug.Parsers.reduce/8 (api 0.1.0) lib/api.ex:1: Api.plug_builder_call/2 (api 0.1.0) lib/plug/error_handler.ex :65: Api.call/2 测试/api_test.exs:168: (测试)
我比较傻眼。
修复失败
为了避免这种情况,我尝试将handle_errors
函数修改为以下内容,但仍然失败:
我所做的一切似乎都无法控制错误。
问题
我怎样才能防止这个错误再次出现并简单地返回我在测试中得到的很好的错误消息?
validation - 使用 Plug 验证特定端点的标头
背景
我有一个简单的 Plug 路由器,它有一些 POST、PUT 和 GET 端点。但是,每个端点都需要对请求的标头进行特定的验证。我不知道如何使用 Plug 来实现这一点。代码
我有一个非常通用的路由器,它接收请求并将它们重定向到控制器:
问题
但是,缺少一个步骤。我需要 /products 端点来验证标头。即标题应该设置一些特定的字段,例如,像“conten-type”标题,甚至是像“bananas”这样的自定义标题。
此验证不适用于所有端点。更糟糕的是,每个端点都会进行自己的验证,例如,具有“bananas”标头对于“/products”端点可能很重要,但“/ping”端点并不真正关心。
研究
我读过这篇文章:
但是,这适用于所有端点并且不是特定的。
问题
- 是否有可能通过 Plug 实现我正在寻找的东西?如果是这样,怎么做?
elixir - Elixir Plug:返回重定向 302
我继承了一个用 Elixir 编写的项目。基本上它是一个 API 网关。在这种情况下,我需要从我的 API Gateway URL 重定向到目标 URL 重定向到的那个。所以情况是这样的。
请求(Elixir 中的 API 网关)> 转到我的服务器,该服务器返回 302 并重定向到另一个 URL。
我写了一些这样的代码:
MyLib.index 很简单
此代码正确管理错误部分,但我无法使其适用于 301 或 302。
(不用说,我一生中从未见过 Elixir)。
controller - Phoenix - 控制器和视图之间的回调操作
我正在为我们的系统构建一个管理工具应用程序。我想记录每个用户所做的每一个动作。
这就是我所做的
|> Activity.log(current_user)
问题是我必须在我的应用程序中的每个控制器的每个操作中进行管道传输。
有没有办法实现这样的事情?
Controller -> (ActivityLogPlugOfSorts) -> View
使用自定义插头并这样称呼它?
但它应该在控制器和视图之间调用。
或者我应该在 View 模块中放置一个函数?
我希望有更好的方法。
android - 如何在 android chrome 中修复 ERR_UNSAFE_PORT
我有一个用 elixir 中的 plug_cowboy 制作的超级基本 http 服务器。当我使用 curl 发送请求时,它按预期工作,但是当我在 google chrome 中这样做时,它显示 ERR_UNSAFE_PORT 错误。这在 nodejs 或 python 服务器上从未发生过。
注意:我在安卓手机上运行它。我见过很多在windows中添加chrome标志的例子,所以不要跟我说同样的话
elixir - elixir phoenix - put_flash/3 在插件中
我创建了一个来检查用户是否已经创建了配置文件,如果他们还没有配置文件,则将他们plug
重定向到页面:/profiles/new
Plug.CheckProfile
但是我在通常用于控制器的地方读到,put_flash
这样做的正确方法是什么?
有替代方案plug
吗?
elixir - Plug 服务器中的 With 块抛出 MatchError 而不是使用 else 块
以前,我会with
在 Elixir Plug 服务器中使用块来解析请求中的参数,并在失败时返回理智的响应。但是,这似乎不再起作用(Elixir 1.11)。谁能指出发生了什么?
Plug
这是一个将显示问题的极简服务器
正如预期的那样,当我a
在 GET 请求中包含参数时,一切正常:
特别是,第一个with
子句按预期工作,当我们尝试Map.fetch()
从空映射中跳转时,它会跳转到else
子句中(您可以看到这是因为字符串“other_with = error”)。
但是,当我尝试排除参数时,我得到 500:
服务器得到一个未捕获的 MatchError:
另请注意警告"else" clauses will never match because all patterns in "with" will always match
- 显然是不真实的!有一种情况是它们不匹配,因为我得到了一个 MatchError。该else
块包括一个:error
选项,它应该捕获这个结果!
database - getLibraryDirectory 不适用于桌面应用程序
我正在开发 Flutter 桌面应用程序并陷入了困境。我想为数据存储创建本地数据库。我正在使用 path_provider 插件来获取用于保存数据库文件的目录路径。函数 getLibraryDirectory() 在我的应用程序中不起作用。我也在创建数据库时调试我的应用程序,此函数抛出异常“UnimplementedError:getLibraryPath() 尚未实现”。
这是我正在使用的插件。https://pub.dev/packages/path_provider
任何人都可以帮助我。谢谢
elixir - 有没有办法让 GenServer 状态持久化?
我正在尝试使用 GenServer 实现一个计数器。这个想法是每当客户端访问服务器时增加一个计数器,并在控制台中打印它。但是,每次访问后 GenServer 状态重置或 PID 终止。有没有办法让 GenServer 状态持久化?
这是代码:
lib/myapp_web/livecount.ex中的计数器文件
我在lib/myapp_web/endpoint.ex中添加了以下代码
这是控制台中的消息:
我要打印
每当客户访问或重新加载页面时,每次所有用户访问都会增加计数器。