簡體   English   中英

跟蹤按鈕的點擊並將其保存到mongoDB

[英]Track clicks on a button and save it to mongoDB

我正在嘗試做一個簡單的“推薦”功能,用戶可以單擊位置頁面上的按鈕,它將place.recoms遞增1並將新值保存到db。 這是我到目前為止的內容:

放置模型:

var placeSchema = new mongoose.Schema({
name: String,
address: String,
image: String,
description: String,
createdAt: {type: Date, default: Date.now},
recoms: Number,
author: {
    id: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "User"
    },
    username: String
},
comments: [
    {
        type: mongoose.Schema.Types.ObjectId,
        ref: "Comment"
    }
]
});

推薦地方路線:

router.post('/places/:id', function(req, res) {
    Place.findById(req.params.id, function(err, place){
        if(err){
            req.flash("error", "Something went wrong.");
            res.redirect("back");
        } else {
            place.recoms++;
            place.save();
            res.redirect("/places/" + req.params.id);
        }
    });  
});

在場所的顯示頁面上推薦Div:

<div id="recommend" class="float-right text-center">
                        <p id="recomCount">
                            <%=place.recoms%> people recomend this place.
                        </p>
                        <form action="/places/<%=place.id%>?_method=PUT" method="post">
                            <a href="/places/<%=place.id%>/recom" id="recomButton" class="btn btn-xs btn-success">Recommend this place</a>
                        </form>
                    </div>

這是呈現頁面的方式:

router.get("/places/:id", function(req, res){
    // find place with provided ID
    Place.findById(req.params.id).populate("comments").exec(function(err, foundPlace){
       if(err || !foundPlace) {
           req.flash("error", "Place not found.");
           res.redirect("back");
       } else {
           // render show template with that place
           res.render("places/show", {place: foundPlace});
       }
    });
});

目前,無論如何,place.recoms值均保持為0。

這不是答案,只是對代碼的注釋。

  1. 單擊“推薦”按鈕時,您會將用戶重定向到上一頁,然后再將建議保存到模型中,我認為這不會使用新值。
  2. 您在哪里以及如何渲染包含“推薦” div的模板?
  3. 您是否將模型更新保存到某個地方的數據庫中?
  4. 表單的操作是帖子,沒有被使用,是嗎?

最后,將路線更改為:

router.put("/places/:id/recom", function(req, res){
    Place.findById(req.params.id, function(err, place){
        console.log(req.params.id);
        if(err){
            req.flash("error", "Something went wrong.");
            res.redirect("back");
        } else {
            place.recoms++;
            place.save();
            res.redirect("/places/" + req.params.id);
        }
    });  
});

並將表格發送至:

<form action="/places/<%=place.id%>/recom/?_method=PUT" method="post">
                            <button id="recomButton" class="btn btn-xs btn-success">Recommend this place</a>
                        </form>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM