#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. отлично! рад помочь