Ai
1 Star 0 Fork 0

rongjianwei/boltdbweb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
index.go 3.96 KB
一键复制 编辑 原始数据 按行查看 历史
avinash dsilva 提交于 2016-07-19 03:33 +08:00 . gofmt'ed the code.
package boltbrowserweb
import (
"bytes"
"fmt"
"github.com/boltdb/bolt"
"github.com/gin-gonic/gin"
)
var Db *bolt.DB
func Index(c *gin.Context) {
c.Redirect(301, "/web/html/layout.html")
}
func CreateBucket(c *gin.Context) {
if c.PostForm("bucket") == "" {
c.String(200, "no bucket name | n")
}
Db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte(c.PostForm("bucket")))
b = b
if err != nil {
return fmt.Errorf("create bucket: %s", err)
}
return nil
})
c.String(200, "ok")
}
func DeleteBucket(c *gin.Context) {
if c.PostForm("bucket") == "" {
c.String(200, "no bucket name | n")
}
Db.Update(func(tx *bolt.Tx) error {
err := tx.DeleteBucket([]byte(c.PostForm("bucket")))
if err != nil {
c.String(200, "error no such bucket | n")
return fmt.Errorf("bucket: %s", err)
}
return nil
})
c.String(200, "ok")
}
func DeleteKey(c *gin.Context) {
if c.PostForm("bucket") == "" || c.PostForm("key") == "" {
c.String(200, "no bucket name or key | n")
}
Db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte(c.PostForm("bucket")))
b = b
if err != nil {
c.String(200, "error no such bucket | n")
return fmt.Errorf("bucket: %s", err)
}
err = b.Delete([]byte(c.PostForm("key")))
if err != nil {
c.String(200, "error Deleting KV | n")
return fmt.Errorf("delete kv: %s", err)
}
return nil
})
c.String(200, "ok")
}
func Put(c *gin.Context) {
if c.PostForm("bucket") == "" || c.PostForm("key") == "" {
c.String(200, "no bucket name or key | n")
}
Db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte(c.PostForm("bucket")))
b = b
if err != nil {
c.String(200, "error creating bucket | n")
return fmt.Errorf("create bucket: %s", err)
}
err = b.Put([]byte(c.PostForm("key")), []byte(c.PostForm("value")))
if err != nil {
c.String(200, "error writing KV | n")
return fmt.Errorf("create kv: %s", err)
}
return nil
})
c.String(200, "ok")
}
func Get(c *gin.Context) {
res := []string{"nok", ""}
if c.PostForm("bucket") == "" || c.PostForm("key") == "" {
res[1] = "no bucket name or key | n"
c.JSON(200, res)
}
Db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(c.PostForm("bucket")))
if b != nil {
v := b.Get([]byte(c.PostForm("key")))
res[0] = "ok"
res[1] = string(v)
fmt.Printf("Key: %s\n", v)
} else {
res[1] = "error opening bucket| does it exist? | n"
}
return nil
})
c.JSON(200, res)
}
type Result struct {
Result string
M map[string]string
}
func PrefixScan(c *gin.Context) {
res := Result{Result: "nok"}
res.M = make(map[string]string)
if c.PostForm("bucket") == "" {
res.Result = "no bucket name | n"
c.JSON(200, res)
}
count := 0
if c.PostForm("key") == "" {
Db.View(func(tx *bolt.Tx) error {
// Assume bucket exists and has keys
b := tx.Bucket([]byte(c.PostForm("bucket")))
if b != nil {
c := b.Cursor()
for k, v := c.First(); k != nil; k, v = c.Next() {
res.M[string(k)] = string(v)
if count > 2000 {
break
}
count++
}
res.Result = "ok"
} else {
res.Result = "no such bucket available | n"
}
return nil
})
} else {
Db.View(func(tx *bolt.Tx) error {
// Assume bucket exists and has keys
b := tx.Bucket([]byte(c.PostForm("bucket"))).Cursor()
if b != nil {
prefix := []byte(c.PostForm("key"))
for k, v := b.Seek(prefix); bytes.HasPrefix(k, prefix); k, v = b.Next() {
res.M[string(k)] = string(v)
if count > 2000 {
break
}
count++
}
res.Result = "ok"
} else {
res.Result = "no such bucket available | n"
}
return nil
})
}
c.JSON(200, res)
}
func Buckets(c *gin.Context) {
res := []string{}
Db.View(func(tx *bolt.Tx) error {
return tx.ForEach(func(name []byte, _ *bolt.Bucket) error {
b := []string{string(name)}
res = append(res, b...)
return nil
})
})
c.JSON(200, res)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/rongjianwei/boltdbweb.git
git@gitee.com:rongjianwei/boltdbweb.git
rongjianwei
boltdbweb
boltdbweb
5b16e6623bd9

搜索帮助