Tambahkan pada senarai sedia ada melalui permintaan http

WBOY
Lepaskan: 2024-02-14 15:57:07
ke hadapan
1004 orang telah melayarinya

通过 http 请求追加到现有列表

Editor PHP Xiaoxin Menambahkan pada senarai sedia ada melalui permintaan http ialah kaedah operasi data biasa. Dengan menghantar permintaan http, kami boleh menambahkan data baharu pada senarai sedia ada untuk mencapai pengemaskinian dinamik dan penambahan data. Kaedah ini sangat biasa digunakan dalam pembangunan web, dan boleh merealisasikan paparan dan kemas kini masa nyata selepas pengguna menyerahkan data. Melampirkan pada senarai sedia ada melalui permintaan http adalah mudah dan pantas, meningkatkan interaktiviti dan pengalaman pengguna halaman web. Sama ada dalam halaman hadapan atau logik belakang, data boleh ditambah dengan cara ini untuk mencapai fungsi yang lebih kaya dan praktikal.

Kandungan soalan

Saya menggunakan gema untuk membuat api rehat yang mudah. Saya mempunyai pembolehubah iaitu peta berikut, berdasarkan struktur yang saya buat ini:

type checklist struct {
        id         int      `json:"id"`
        title      string   `json:"title"`
        lines      []string `json:"lines"`
        authorname string   `json:"authorname"`
        authorid   int      `json:"authorid"`
        tags       []tag    `json:"tags"`
    }

    var (
        checklists    = map[int]*checklist{}
        checklistseq  = 1
        checklistlock = sync.mutex{}
    )
Salin selepas log masuk

Selepas mencipta senarai semak baharu dan melampirkannya pada pembolehubah senarai semak, bagaimanakah cara saya menghantar permintaan untuk menambahkan baris baharu dalam medan "baris" senarai semak baharu?

Penyelesaian yang saya fikirkan ialah ini:

func createchecklist(c echo.context) error {
        checklistlock.lock()
        defer checklistlock.unlock()
        newchecklist := &checklist{
            id:    checklistseq,
            lines: make([]string, 0),
            tags:  make([]tag, 0),
        }
        if err := c.bind(newchecklist); err != nil {
            return err
        }
        checklists[newchecklist.id] = newchecklist
        checklistseq++
        return c.json(http.statusok, newchecklist)
    }
    func addline(c echo.context) error {
        checklistlock.lock()
        defer checklistlock.unlock()
        id, _ := strconv.atoi(c.param("id"))
        checklist := *checklists[id]
        line := []string{""}
        if err := c.bind(line); err != nil {
            return err
        }
        checklist.lines = line
        return c.json(http.statuscreated, checklists)
    }
Salin selepas log masuk

Namun, apabila saya menguji pengendali ini, ia memberikan keputusan berikut:

// 1: Creating a new checklist

    $ curl -X POST -H 'Content-Type: application/json' -d '{"title": "test"}' localhost:1234/checklist

    >> {"id":1,"title":"test","lines":[],"authorName":"","authorID":0,"tags":[]}

    // 2: Check to see the checklist has been created.
 
    $ curl -X GET localhost:1234/checklist

    >> {"1":{"id":1,"title":"test","lines":[],"authorName":"","authorID":0,"tags":[]}}
    // 3: Attempting to create a new line
    $ curl -X POST -H 'Content-Type: application/json' -d '{"lines": "test123"}' localhost:1234/checklist/1

    >> curl: (52) Empty reply from server

    // 4: Confirming it hasn't been created.

    $ curl -X GET localhost:1234/checklist

    >> {"1":{"id":1,"title":"test","lines":[],"authorName":"","authorID":0,"tags":[]}}
Salin selepas log masuk

Jadi fungsi itu sebenarnya tidak berfungsi kerana ping siaran ke laluan yang sesuai tidak mengembalikan respons yang dijangkakan mahupun menambahkan baris ke medan.

Penyelesaian

func addline(c echo.context) error {
    checklistlock.lock()
    defer checklistlock.unlock()

    id, err := strconv.atoi(c.param("id"))
    if err != nil {
        return err
    }

    // do not deref *checklist
    cl, ok := checklists[id]
    if !ok {
        return echo.errnotfound
    }

    // use same structure as the expected json
    var input struct { lines []string `json:"lines"` }

    // always pass a pointer to c.bind
    if err := c.bind(&input); err != nil {
        return err
    }

    // do not overwrite previously written lines, use append
    cl.lines = append(cl.lines, input.lines...)

    return c.json(http.statusok, cl)
}
Salin selepas log masuk

Cuba sekarang:

$ curl -X POST -H 'Content-Type: application/json' -d '{"lines": ["test123"]}' localhost:1234/checklist/1
Salin selepas log masuk

(nota "test123" disertakan dalam kurungan)

Atas ialah kandungan terperinci Tambahkan pada senarai sedia ada melalui permintaan http. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan