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
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
$ go get -u github.com/kataras/iris
@ -158,6 +158,13 @@ func main() {
// Method: GET
// 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) {
userID, _ := ctx.Params().GetInt64("id")
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
<!-- file: ./views/hello.html -->
<html>

View File

@ -11,9 +11,19 @@ func main() {
app.Get("/", info)
// 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)
// 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
app.Get("/profile/{username:string}/backups/{filepath:path}", info)
app.Get("/profile/{username}/backups/{filepath:path}", info)
// Favicon
// 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.
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:

View File

@ -98,7 +98,7 @@ func (f *uploadedFiles) scan(dir string) {
f.dir = dir
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_") {
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.
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:

View File

@ -55,7 +55,7 @@ func (f *uploadedFiles) scan(dir string) {
f.dir = dir
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_") {
return nil
}

6
doc.go
View File

@ -110,6 +110,12 @@ Example code:
// Method GET: http://localhost:8080/profile/anytypeofstring
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)
{
// Method GET: http://localhost:8080/users/42