Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
beego
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
beego
Commits
828cbbdf
Commit
828cbbdf
authored
May 17, 2017
by
Eyal Post
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor a bit to consolidate packages
parent
d54cd4fa
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
60 additions
and
67 deletions
+60
-67
context.go
context/context.go
+16
-0
output.go
context/output.go
+13
-0
renderer.go
context/renderer.go
+12
-0
responses.go
context/response/responses.go
+0
-53
response.go
httpResponse/response.go
+18
-12
router.go
router.go
+1
-2
No files found.
context/context.go
View file @
828cbbdf
...
...
@@ -171,6 +171,22 @@ func (ctx *Context) CheckXSRFCookie() bool {
return
true
}
// RenderMethodResult renders the return value of a controller method to the output
func
(
ctx
*
Context
)
RenderMethodResult
(
result
interface
{})
{
if
result
!=
nil
{
renderer
,
ok
:=
result
.
(
Renderer
)
if
!
ok
{
err
,
ok
:=
result
.
(
error
)
if
ok
{
renderer
=
errorRenderer
(
err
)
}
else
{
renderer
=
jsonRenderer
(
result
)
}
}
renderer
.
Render
(
ctx
)
}
}
//Response is a wrapper for the http.ResponseWriter
//started set to true if response was written to then don't execute other handler
type
Response
struct
{
...
...
context/output.go
View file @
828cbbdf
...
...
@@ -168,6 +168,19 @@ func sanitizeValue(v string) string {
return
cookieValueSanitizer
.
Replace
(
v
)
}
func
jsonRenderer
(
value
interface
{})
Renderer
{
return
rendererFunc
(
func
(
ctx
*
Context
)
{
ctx
.
Output
.
JSON
(
value
,
false
,
false
)
})
}
func
errorRenderer
(
err
error
)
Renderer
{
return
rendererFunc
(
func
(
ctx
*
Context
)
{
ctx
.
Output
.
SetStatus
(
500
)
ctx
.
WriteString
(
err
.
Error
())
})
}
// JSON writes json to response body.
// if coding is true, it converts utf-8 to \u0000 type.
func
(
output
*
BeegoOutput
)
JSON
(
data
interface
{},
hasIndent
bool
,
coding
bool
)
error
{
...
...
context/renderer.go
0 → 100644
View file @
828cbbdf
package
context
// Renderer defines an http response renderer
type
Renderer
interface
{
Render
(
ctx
*
Context
)
}
type
rendererFunc
func
(
ctx
*
Context
)
func
(
f
rendererFunc
)
Render
(
ctx
*
Context
)
{
f
(
ctx
)
}
context/response/responses.go
deleted
100644 → 0
View file @
d54cd4fa
package
response
import
(
beecontext
"github.com/astaxie/beego/context"
)
// JSON renders value to the response as JSON
func
JSON
(
value
interface
{},
encoding
...
bool
)
Renderer
{
return
rendererFunc
(
func
(
ctx
*
beecontext
.
Context
)
{
var
(
hasIndent
=
true
hasEncoding
=
false
)
//TODO: need access to BConfig :(
// if BConfig.RunMode == PROD {
// hasIndent = false
// }
if
len
(
encoding
)
>
0
&&
encoding
[
0
]
{
hasEncoding
=
true
}
ctx
.
Output
.
JSON
(
value
,
hasIndent
,
hasEncoding
)
})
}
func
errorRenderer
(
err
error
)
Renderer
{
return
rendererFunc
(
func
(
ctx
*
beecontext
.
Context
)
{
ctx
.
Output
.
SetStatus
(
500
)
ctx
.
WriteString
(
err
.
Error
())
})
}
// Redirect renders http 302 with a URL
func
Redirect
(
localurl
string
)
error
{
return
statusCodeWithRender
{
302
,
func
(
ctx
*
beecontext
.
Context
)
{
ctx
.
Redirect
(
302
,
localurl
)
}}
}
// RenderMethodResult renders the return value of a controller method to the output
func
RenderMethodResult
(
result
interface
{},
ctx
*
beecontext
.
Context
)
{
if
result
!=
nil
{
renderer
,
ok
:=
result
.
(
Renderer
)
if
!
ok
{
err
,
ok
:=
result
.
(
error
)
if
ok
{
renderer
=
errorRenderer
(
err
)
}
else
{
renderer
=
JSON
(
result
)
}
}
renderer
.
Render
(
ctx
)
}
}
context/response/renderer
.go
→
httpResponse/response
.go
View file @
828cbbdf
package
r
esponse
package
httpR
esponse
import
(
"strconv"
...
...
@@ -9,19 +9,18 @@ import (
)
const
(
NotFound
StatusCode
=
http
.
StatusNotFound
//BadRequest indicates http error 400
BadRequest
StatusCode
=
http
.
StatusBadRequest
)
// Renderer defines an http response renderer
type
Renderer
interface
{
Render
(
ctx
*
beecontext
.
Context
)
}
type
rendererFunc
func
(
ctx
*
beecontext
.
Context
)
//NotFound indicates http error 404
NotFound
StatusCode
=
http
.
StatusNotFound
)
func
(
f
rendererFunc
)
Render
(
ctx
*
beecontext
.
Context
)
{
f
(
ctx
)
// Redirect renders http 302 with a URL
func
Redirect
(
localurl
string
)
error
{
return
statusCodeWithRender
{
302
,
func
(
ctx
*
beecontext
.
Context
)
{
ctx
.
Redirect
(
302
,
localurl
)
}}
}
// StatusCode sets the http response status code
...
...
@@ -38,9 +37,16 @@ func (s StatusCode) Render(ctx *beecontext.Context) {
type
statusCodeWithRender
struct
{
statusCode
int
rendererFunc
f
func
(
ctx
*
beecontext
.
Context
)
}
//assert that statusCodeWithRender implements Renderer interface
var
_r
beecontext
.
Renderer
=
(
*
statusCodeWithRender
)(
nil
)
func
(
s
statusCodeWithRender
)
Error
()
string
{
return
strconv
.
Itoa
(
s
.
statusCode
)
}
func
(
s
statusCodeWithRender
)
Render
(
ctx
*
beecontext
.
Context
)
{
s
.
f
(
ctx
)
}
router.go
View file @
828cbbdf
...
...
@@ -28,7 +28,6 @@ import (
beecontext
"github.com/astaxie/beego/context"
"github.com/astaxie/beego/context/param"
"github.com/astaxie/beego/context/response"
"github.com/astaxie/beego/logs"
"github.com/astaxie/beego/toolbox"
"github.com/astaxie/beego/utils"
...
...
@@ -905,7 +904,7 @@ func (p *ControllerRegister) handleParamResponse(context *beecontext.Context, ex
result
:=
results
[
i
]
if
result
.
Kind
()
!=
reflect
.
Interface
||
!
result
.
IsNil
()
{
resultValue
:=
result
.
Interface
()
response
.
RenderMethodResult
(
resultValue
,
context
)
context
.
RenderMethodResult
(
resultValue
)
}
}
if
!
context
.
ResponseWriter
.
Started
&&
context
.
Output
.
Status
==
0
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment