Saya mencoba membuat aplikasi CRUD sederhana yang memposting daftar hal-hal ke database Postgres. Saya mengalami kesulitan untuk menghapus dari aplikasi karena saya terus mendapatkan 404 kesalahan. Saya pikir saya melakukan sesuatu yang salah di backend karena saya bahkan tidak bisa menghapus dengan Postman.

Delete.js // penghapusan router

router.delete('/',(req,res)=>{
    var item = req.params.index;
    console.log(`req.params.index is ${req.params.index}`)


    let deletion = `DELETE FROM tnotesapi1.tearecords
       WHERE primary_key = ${item}`


    client.query(deletion, (res,err)=>{
        if(err){
            console.error(`Record Query error, ${err.stack}`)

        }else{
            console.log('Item has been deleted from dB')
            res.send()
        }
    })


})

Penangan router untuk server

app.delete('/api/delete/:index',deleteRouter)

Juga, bagaimana cara menggunakan axios di frontend?

tearecord.delete(`delete/`,{params:index})
        .then(res => {
            console.log();
        })
0
studentneedshelp 27 Januari 2020, 07:59

2 jawaban

Jawaban Terbaik

Satu-satunya alasan mengapa Anda mendapatkan 404 ERROR adalah karena rute Anda tidak ditemukan.

Mengapa rute Anda tidak Ditemukan? Itu karena di handler Anda: server.js atau app.js, Anda menyetel metode hapus seperti ini:

app.delete('/api/delete/:index',deleteRouter)

Sebaiknya jangan lakukan itu, karena Anda pernah menyetel metode delete di deletion.js. Jadi, Anda hanya perlu membuat sesuatu seperti ini:

app.use('/api/delete/:index',deleteRouter)

Kode di atas hanya sebagai contoh. Jika itu membingungkan Anda, Anda dapat melihat kode lengkap di bawah ini.

Anda dapat melakukannya seperti kode di bawah ini :

penghapusan.js

router.delete('/:index',(req,res)=>{
    var item = req.params.index;
    console.log(`req.params.index is ${req.params.index}`)


    let deletion = `DELETE FROM tnotesapi1.tearecords
       WHERE primary_key = ${item}`


    client.query(deletion, (res,err)=>{
        if(err){
            console.error(`Record Query error, ${err.stack}`)

        }else{
            console.log('Item has been deleted from dB')
            res.send()
        }
    })
})

Pada kode di atas , Anda harus menambahkan params. Karena Anda menggunakan index, maka Anda harus menambahkan index sebagai params.

server/app.js

app.use('/api/delete', deleteRouter)

Sekarang, di pengendali server atau app Anda, Anda tidak perlu menggunakan delete lagi. Karena Anda menggunakannya di deletion.js Anda.

Frontend: menggunakan axios

// change with your endpoint
const endPoint = 'http://localhost:3000/api/delete/' + index;
axios.delete(endpoint)
  .then(response => {
      console.log(response.data);
  }).catch(ex => {
    console.log(ex.data);
  })

📤 Diperbarui: Menggunakan Ambil.

Jika Anda menggunakan React, maka Anda dapat menggunakan fetch di sana, tanpa menggunakan axios.

Anda dapat menggunakan contoh kode di bawah ini:

async handleDelete(index) {
  try {
    // change the endpoint with yours
    const endpoint =  'http://localhost:3000/api/delete/' + index;
    const result = await fetch( endpoint, { method: 'DELETE' });
    const json = await result.json();
    console.log(json);
    // do some stuff here: set state or some stuff you want
  } catch(ex) {
    console.log(ex);
  }
}

Kode di atas contoh, cara mengirim permintaan delete ke backend Anda menggunakan fetch sebagai reaksi.

Semoga dapat membantu anda 🙏.

1
Titus Sutio Fanpula 27 Januari 2020, 06:48

Di axios permintaan pass index Anda secara langsung sebagai param dengan panggilan api

tearecord.delete(`/api/delete/${index}`)  // pass your index directly 
  .then(res => {
            console.log();
        })

Latar Belakang :

router.delete('/api/delete/:index',(req,res)=>{ // put here index as params in backend 
    var item = req.params.index;
0
Prakash Karena 27 Januari 2020, 05:07