Sinatra 关于 sinatra 中 路由使用 if else 问题

690492623qq · 2012年12月19日 · 最后由 690492623qq 回复于 2012年12月19日 · 3011 次阅读

大家遇到 业务 繁杂时,if else 语句 判断语句 也就多了起来,那么是如何在 route 中处理的;不喜欢 if else 嵌套来 嵌套去 ,代码阅读费劲。 举个例子:

get ‘/demo’ do
    id = param[:id]
    type = param[:type]
    if id.nil? || type.nil?
       content_type :json
            ........
    else
       #id,type 请求其他系统,再次嵌套。。。
       result = xxxxx
       if result.nil ?
         content_type :json
            ........
       else
         content_type :json
            ........
       end
   end
end

用 json 输出,上面代码就有点繁杂了,代码维护就难。。

有没有类似 java 中输出

get ‘/demo’ do
if 条件1
  return  json数据
end

if 条件2   
  return  json数据
end

 其他数据输出
end

或者有其他的 好的方法。。。

# encoding: utf-8
require'sinatra'

get "/" do
  "123"
  return "789"
  "456"
end

你自己有没有尝试过 return?

#1 楼 @Saito 试了一下,之前我试了 return 方式,我在前面加了 content_type :json,导致失败。。 那我还想继续问一下 return json 数据和 content_type :json json 数据 之间 一样的吗???

content_type :json 这种方式应该是给响应头部加上指定的头部消息吧,内容应该是一样的

#3 楼 @ywjno 内容一样,http 消息 header 是不一样的。一个有 json 标示,另一个没有。那么他们之间的差异性如何??

#4 楼 @690492623qq 性能不清楚,不是默认的就是直接 print 到页面上么,json格式的话可以直接给 js 使用(不太清楚没仔细研究这里

我觉得是不是应该采用重定向的方式,当判断到是某种情况的时候就重定向过去让那边处理视图,然后 url 还保持不变,而且不是 post 提交的话还能对应 F5 刷新页面

#5 楼 @ywjno 我这边是向外提供 json 数据格式接口,没有 views。我在找找看看两者之间的区别。。觉得可能有些客户端 会那个 header 中 json 机型设置判断啥。导致有些用户接受不到 json 数据。。只是猜测。。。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册