Bet that many of you didn't know that Iris could handle regexp-based path parameters with ease :)

Former-commit-id: d2c5564cfb99fbea5d90106be0c6d5c505d293ab
This commit is contained in:
Gerasimos (Makis) Maropoulos 2017-10-04 03:12:50 +03:00
parent efa3c8557a
commit f780159afe
6 changed files with 31 additions and 6 deletions

View File

@ -127,7 +127,7 @@ Help this project to continue deliver awesome and unique features with the highe
### 🚀 Installation ### 🚀 Installation
The only requirement is the [Go Programming Language](https://golang.org/dl/), at least version 1.8 but **1.9** is highly recommended. The only requirement is the [Go Programming Language](https://golang.org/dl/), at least version 1.9.
```sh ```sh
$ go get -u github.com/kataras/iris $ go get -u github.com/kataras/iris
@ -158,6 +158,13 @@ func main() {
// Method: GET // Method: GET
// Resource: http://localhost:8080/user/42 // Resource: http://localhost:8080/user/42
//
// Need to use a custom regexp instead?
// Easy;
// Just mark the parameter's type to 'string'
// which accepts anything and make use of
// its `regexp` macro function, i.e:
// app.Get("/user/{id:string regexp(^[0-9]+$)}")
app.Get("/user/{id:long}", func(ctx iris.Context) { app.Get("/user/{id:long}", func(ctx iris.Context) {
userID, _ := ctx.Params().GetInt64("id") userID, _ := ctx.Params().GetInt64("id")
ctx.Writef("User ID: %d", userID) ctx.Writef("User ID: %d", userID)
@ -168,6 +175,8 @@ func main() {
} }
``` ```
> See all available path parameter types at: https://github.com/kataras/iris/blob/master/_examples/routing/dynamic-path/main.go#L31
```html ```html
<!-- file: ./views/hello.html --> <!-- file: ./views/hello.html -->
<html> <html>

View File

@ -11,9 +11,19 @@ func main() {
app.Get("/", info) app.Get("/", info)
// GET: http://localhost:8080/profile/anyusername // GET: http://localhost:8080/profile/anyusername
//
// Want to use a custom regex expression instead?
// Easy: app.Get("/profile/{username:string regexp(^[a-zA-Z ]+$)}")
app.Get("/profile/{username:string}", info) app.Get("/profile/{username:string}", info)
// If parameter type is missing then it's string which accepts anything,
// i.e: /{paramname} it's exactly the same as /{paramname:string}.
// The below is exactly the same as
// {username:string}
//
// GET: http://localhost:8080/profile/anyusername/backups/any/number/of/paths/here // GET: http://localhost:8080/profile/anyusername/backups/any/number/of/paths/here
app.Get("/profile/{username:string}/backups/{filepath:path}", info) app.Get("/profile/{username}/backups/{filepath:path}", info)
// Favicon // Favicon
// GET: http://localhost:8080/favicon.ico // GET: http://localhost:8080/favicon.ico

View File

@ -152,7 +152,7 @@ func main() {
7. If file is sent to the page, store the file object to a temporary "file" variable. 7. If file is sent to the page, store the file object to a temporary "file" variable.
8. Move uploaded file to destination based on the uploadsDir+uploaded file's name. 8. Move uploaded file to destination based on the uploadsDir+uploaded file's name.
### Runing the server ### Running the server
Open the terminal at the current project's folder and execute: Open the terminal at the current project's folder and execute:

View File

@ -98,7 +98,7 @@ func (f *uploadedFiles) scan(dir string) {
f.dir = dir f.dir = dir
filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
// if it's directory or a thumbnail we saved ealier, skip it. // if it's directory or a thumbnail we saved earlier, skip it.
if info.IsDir() || strings.HasPrefix(info.Name(), "thumbnail_") { if info.IsDir() || strings.HasPrefix(info.Name(), "thumbnail_") {
return nil return nil
} }
@ -283,7 +283,7 @@ Copy content below to "./views/upload.html". We will go through modifications in
4. Retrieve files details from the new "/uploads" via ajax. 4. Retrieve files details from the new "/uploads" via ajax.
5. Create mockFile using values from server. mockFile is simply JavaScript objects with properties of name and size. Then we call Dropzone's **addedfile** and **thumbnail** functions explicitly to put existing files to Dropzone upload area and generate its thumbnail. 5. Create mockFile using values from server. mockFile is simply JavaScript objects with properties of name and size. Then we call Dropzone's **addedfile** and **thumbnail** functions explicitly to put existing files to Dropzone upload area and generate its thumbnail.
### Runing the server ### Running the server
Open the terminal at the current project's folder and execute: Open the terminal at the current project's folder and execute:

View File

@ -55,7 +55,7 @@ func (f *uploadedFiles) scan(dir string) {
f.dir = dir f.dir = dir
filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
// if it's directory or a thumbnail we saved ealier, skip it. // if it's directory or a thumbnail we saved earlier, skip it.
if info.IsDir() || strings.HasPrefix(info.Name(), "thumbnail_") { if info.IsDir() || strings.HasPrefix(info.Name(), "thumbnail_") {
return nil return nil
} }

6
doc.go
View File

@ -110,6 +110,12 @@ Example code:
// Method GET: http://localhost:8080/profile/anytypeofstring // Method GET: http://localhost:8080/profile/anytypeofstring
app.Get("/profile/{username:string}", profileByUsername) app.Get("/profile/{username:string}", profileByUsername)
// Want to use a custom regex expression instead?
// Easy: app.Get("/profile/{username:string regexp(^[a-zA-Z ]+$)}")
//
// If parameter type is missing then it's string which accepts anything,
// i.e: /{paramname} it's exactly the same as /{paramname:string}.
usersRoutes := app.Party("/users", logThisMiddleware) usersRoutes := app.Party("/users", logThisMiddleware)
{ {
// Method GET: http://localhost:8080/users/42 // Method GET: http://localhost:8080/users/42