Я пытаюсь создать простую функцию «рекомендовать», когда пользователь может нажать кнопку на странице места, и она увеличивает 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, несмотря ни на что.

0
Sam 14 Сен 2018 в 17:49

2 ответа

Лучший ответ

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

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
Sam 14 Сен 2018 в 15:53

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

  1. Нажимая кнопку «Рекомендовать», вы перенаправляете пользователя на предыдущую страницу, прежде чем сохранять рекомендации для модели, я не думаю, что будет использоваться новое значение.
  2. Где и как вы визуализируете шаблон, содержащий div Recommends?
  3. Вы где-то сохраняете обновления модели в БД?
  4. Действие формы - это сообщение, оно не используется, не так ли?
0
Kareem 14 Сен 2018 в 15:03