Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tambahkan pada senarai sedia ada melalui permintaan http

Tambahkan pada senarai sedia ada melalui permintaan http

WBOY
WBOYke hadapan
2024-02-14 15:57:071001semak imbas

通过 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{}
    )

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)
    }

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":[]}}

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)
}

Cuba sekarang:

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

(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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam