Gem 怎么格式化 rack 的 @env

tablecell · 2021年09月08日 · 最后由 tablecell 回复于 2021年09月09日 · 295 次阅读

象 "rack.input"=>#<Rack::Lint::InputWrapper 这种是不符合 json 格式,常用的 json 格式化工具也用不了

这一看大概是 Hash,里面有的值还是对象(非基本类型),要把它格式化为 json 是什么需求?

硬要做的话:

require 'json'

JSON.dump @env
Rei 回复

json 可以输出树状视图 看起来清楚一些

rack 就是 输入一个特定格式的 Hash,然后输出一个特定格式的 Array

def call(Hash)
    ['code', {'Content-Type' => 'xxx'}, ['body']]
end 
tablecell 回复

是要把 json 内容作为 response 输出吗?把上面的 JSON.dump 内容作为 body,conntent-type 设置为 application/json

Rei 回复

app.rb

require "rack/app"
class App < Rack::App
  get "/" do
    '<form  action="/" method="post" ><input name="username" ><button>Send</button></form></body></html>'
  end
  post "/" do
    params.inspect 
  end
end

config.ru

require './app'
run App

rackup

是看 http://www.rack-app.com/ 这个框架

ruby 的框架真是五花八门 post 参数有的 params 有的是 input 有的是 req 有的是 request.params 不看代码真不知道表单 post 到哪去了

rack-app 是 rack 吗?

FrankFang 回复

是只依赖 rack 的一个框架 主要功能特点

  • 前缀树路由 写好一个 路由 (对应 rails 的 resouces) 以后 可以 mount 到任意节点 象 include class 那样使用路由
  • 自定义 form parser 可以定制自己的 post 数据格式,比如 post yaml 不仅仅是 form-urlencoded,json 格式两种
  • 针对节点(endpoint)添加 headers/middleware,而不是象一般框架那样全局添加,不管需不需要都要例行公事过一遍
  • form 参数校验
  • 只实现最小可用,可选的功能用 apply_extension 实现 比如模板,日志
  • pure ruby,只依赖 rack
需要 登录 后方可回复, 如果你还没有账号请 注册新账号