2016-07-31 36 views
0

Ich versuche, eine Löschoption für einige Elemente in einer Liste zu machen. Die Art, wie ich das mache, ist, jedem Gegenstand in der Liste einen Knopf oder einen Link irgendeiner Art zu geben, der POST benutzt, um die _id (von mongodb) zu senden. Wie Sie im Code unten sehen können (req.body.id), versuche ich die ID aus der Anfrage zu bekommen. Die Anfrage hat jedoch keine ID, weil ich nicht weiß, wie das geht, ohne ein Formular und ein Eingabefeld zu verwenden.POST ohne ein Formular in Jade und node.js verwenden?

Ich habe einige Möglichkeiten gesehen, es mit Javascript in PHP zu tun. Aber gibt es eine spezifischere Art von jade und node.js?

router.post("/deleteitem", function(req,res) { 
    var db = req.db; 
    var collection = db.get("itemcollection"); 
    id = req.body.id; 

    collection.remove({ 
    "_id": id 
    }, function (err, removed) { 
    if (err) { 
     res.send("Error"); 
    } 
    else { 
     res.redirect("editlist"); 
    } 
    }); 
}); 

Danke für die Hilfe.

Edit:

Client-side:

extends layout 

block content 
    h1. 
     Items 
    ul 
     each item, i in editlist 
      li 
       p #{item.name} costs #{item.price} 
       button#btnSubmit(type="button",method="post",action="/deleteitem") Delete 

    a(href="/") Back to start 

Der Knopfteil, wenn auch nicht sehr relevant ist. Erstens bin ich mir nicht sicher, ob es so geht. Zweitens habe ich die ID in keiner Weise aufgenommen. Ich habe gerade experimentiert.

Eine Möglichkeit, die ich wahrscheinlich tun könnte, ist, die ID in die URL als Parameter aufzunehmen. Aber das scheint etwas komplizierter als nur POST zu verwenden und die ID in die Anfrage aufzunehmen.

+0

Wo ist Ihr clientseitiger Code? –

+0

@IsmailRBOUH Hinzugefügt. Der Button-Teil ist allerdings nicht sehr relevant, da ich mir nicht sicher bin, ob es so geht. Ich habe gerade experimentiert. – Smebbs

+0

Haben Sie versucht, die Daten im Abfrageparameter zu senden? – notionquest

Antwort

1

Sie müssen die POST Daten mit einem HTML-Formular an das Objekt req.body exponieren, auch wenn das nur die Form einer Schaltfläche mit versteckten Daten annimmt. Sie können dies tun, indem Sie ein input Element neben Ihrem button Element in einem Formular verwenden.

extends layout 

block content 
    h1. 
     Items 
    ul 
     each item, i in editlist 
      li 
       p #{item.name} costs #{item.price} 
       form(action="/deleteitem",method="post") 
        input(type="hidden",id="id",value="#{item.id}") 
        button#btnSubmit(type="button") Delete 

    a(href="/") Back to start 

Dieser Code geht davon aus, dass jedes item ein id Attribut hat.

Mit diesem können Sie den id Wert über req.body.id in der nächsten Route, die Sie über die Schaltfläche übermitteln.

+0

Im Titel, ** ohne ein Formular **: D –

+0

Ja, ich bin auf der Suche nach einer Möglichkeit, es ohne Formulare zu tun. Aber um ehrlich zu sein, hatte ich den "type =" hidden "" vergessen. Also könnte ich das versuchen und sehen, wie es ausgeht. Danke für die Hilfe. – Smebbs

+0

'POST'-Daten sollten mit einem' form'-Element gesendet werden. Andernfalls können Sie das Objekt 'params' über eine bestimmte URL senden. – roflmyeggo