При обновлении элемента, значение которого по умолчанию равно false или null, возникает ошибка TypeError: не удается прочитать свойство ‘exvariable’, равное null

#node.js #mongodb #express #mongoose #mongoose-schema

#node.js #mongodb #выразить #мангуст #mongoose-schema

Вопрос:

Я работаю над nodejs express с помощью mongoose. У каждого пользователя есть такие, exvariable которые контролируют разрешение иметь exvariabletext .

Моя схема модели пользователя exvariable и exvariabletext ;
exvariable : {тип: логическое значение, по умолчанию: false},
exvariabletext:{тип: Строка, по умолчанию: null}

Когда я пытаюсь найти пользователя и проверить if(user.exvariable === false) , я получаю ошибку, подобную этой
TypeError: не удается прочитать свойство ‘exvariable’ из null. Поэтому я не могу использовать значение по умолчанию и обновлять его.

Я попытался изменить значение по умолчанию в схеме и элементе управления в синтаксисе nodejs, но не смог передать ошибку, и я хочу понять логику.

И мой код выглядит так;

 router.post("/setexvariable",(req,res)=>{
    
    User.findById(req.params.id,(err,user)=>{
        if(err){
            console.log(err);
            req.flash("error","Oops, try again 😔");
            res.redirect("back");
        }
        
        if(user.exvariable == false){
            user.exvariable=true;
            user.exvariabletext=req.body.text;
            user.save();
            req.flash("success","Welcome 😍");
            res.redirect("/somewhere",{user:user});
        }else{
            req.flash("error","You already has a exvariable 😔");
            res.redirect("back");
        }
    });
});
 

Ответ №1:

Вы должны установить id параметр в своем маршруте, чтобы иметь к нему доступ req.params.id . В вашем коде req.params.id есть undefined , поэтому ваш запрос возвращает null .

У вас должно быть что-то вроде router.post("/setexvariable/:id", (req, res) => {...}) . Подробнее о параметрах маршрута в документации Express.

Комментарии:

1. Спасибо, vpalmerini, я не использовал определенный маршрут для этого запроса post, но старые привычки. Я меняю req.params.id на req.user.id (этот запрос определяется после аутентификации, поэтому у меня есть сеанс пользователя), тогда я мог бы получить доступ к пользователю и его свойствам. Еще раз спасибо.

2. отлично! рад помочь