Как изменить значение User isActive: логическое значение в узле Js - PullRequest
0 голосов
/ 19 марта 2019

Модель пользователя, которая имеет isActive: Boolean

При нажатии кнопки происходит перенаправление на маршрут и поиск пользователя с идентификатором из параметров.

после поиска пользователя проверяется значение isActive.

Если значение не истинно, измените его на ложное или если значение истинно, измените его на истинное

<form action="/admin/user/<%= user._id %>/status?_method=PUT" method="POST">
    <button type="submit" class="btn btn-success btn-group-sm"><i class="fas fa-check-circle"></i></button>
</form>

Кнопка, которая отправляет req как PUT на маршрут

const mongoose = require("mongoose");
const passportLocalMongoose = require("passport-local-mongoose");


const UserSchema = mongoose.Schema({
    name: String,
    mobile: String,
    gender: String,
    username: String,
    password: String,
    isActive: {
        type: Boolean,
        default: true
    },
    created: {
        type: Date,
        default: Date.now()
    }
});

UserSchema.plugin(passportLocalMongoose);

const User = new mongoose.model("user", UserSchema);

module.exports = User;

Маршрут для поиска и изменения значения isActive

router.put("/admin/user/:id/status", (req, res) => {
    User.findById(req.params.id, (err, foundUser) => {
        console.log(foundUser.isActive);
        if (err) {
            console.log(err);
        } else if (foundUser.isActive == false) {
            User.update({_id: req.params.id}, {$set: {isActive: true}});
            res.redirect("/admin/users-details");
        } else {
            User.update({_id: req.params.id}, {$set: {isActive: false}});
            res.redirect("/admin/users-details");
        }
    });
});

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Попробуйте подождать до тех пор, пока процесс обновления не выдаст результат перед страницей перенаправления, на примере вы можете увидеть, что происходит при попытке обновить запись:

router.put("/admin/user/:id/status", (req, res) => {
    User.findById(req.params.id, (err, foundUser) => {
        console.log(foundUser.isActive);
        if (err) {
            console.log(err);
            return res.redirect("/admin/users-details?error=" + err.toString());
        }
        User.update({ _id: foundUser._id }, { $set: { isActive: !foundUser.isActive } }, (err2, result) => {
            console.log(err, result);
            res.redirect("/admin/users-details");
        });
    });
});
0 голосов
/ 19 марта 2019

в вашей модели isActive тип поля Boolean, но вы проверяете его как строку:

else if (foundUser.isActive !== "true")

изменить его else if(foundUser.isActive)

также вы можете выполнять поиск и обновление пользователя в одном запросе mongodb, как показано ниже: User.findOne({ _id: req.params.id }, function(err, user) { user.isActive = !user.isActive; user.save(function(err, updatedUser) { ... }); });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...