Отслеживайте нажатия на кнопку и сохраняйте его в mongoDB - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь создать простую функцию «порекомендовать», где пользователь может нажать кнопку на странице места, и это увеличивает значение place.recoms на 1 и сохраняет новое значение в БД. Это то, что я до сих пор:

Место Модель:

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 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 независимо от того, что.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Наконец-то решили, изменив маршрут на:

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>
0 голосов
/ 14 сентября 2018

Это не ответ, просто комментарии к коду.

  1. При нажатии кнопки рекомендации вы перенаправляете пользователя на предыдущую страницу, прежде чем сохранять рекомендации в модели, я неНе думаю, что будет использоваться новое значение.
  2. Где и как вы визуализируете шаблон, который содержит div Recommended?
  3. Сохраняете ли вы обновления модели в БД где-нибудь?
  4. Действие формы - это сообщение, оно не используется, не так ли?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...