TypeError:无法将属性“标题”设置为 null

Posted

技术标签:

【中文标题】TypeError:无法将属性“标题”设置为 null【英文标题】:TypeError: Cannot set property 'title' of null 【发布时间】:2019-04-18 22:20:54 【问题描述】:

我也是 nodejs 和 expressjs mongoose 的新手,我在这些 sn-ps 中遇到了错误。

/* POST 编辑类别*/

router.post('/edit-category/:id', function (req, res) 

    var title = req.body.title;
    var slug =title.replace(/\s+/g, '-').toLowerCase();


    var id = req.body.id;


    var errors = req.validationErrors();
    if (errors) 
        res.render('admin/edit_category', 
            errors: errors,
            title: title,
            id: id
        );
     else 
        Category.findOne(slug:slug, _id:  '$ne': id  , function (err, category) 

            if (category) 
                req.flash('danger', ' Category Title exists , choose another.');
                res.render('admin/edit_category', 
                    title: title,
                    id: id
                );
            
            else 
                Category.findById(id, function (err, category) 
                    if (err) 
                        return console.log(err);
                    
                    category.title = title;
                    category.slug = slug;


                    category.save(function (err) 
                        if (err)
                            return console.log(err);
                        req.flash('success', 'Category editted!');
                        res.redirect('/admin/categories/edit-category/' +id);

                    );
                );
            
        );
    


);

在 D:\projects\cmscart\routes\admin_categories.js:142:36 在模型.查询。 (D:\projects\cmscart\node_modules\mongoose\lib\model.js:3407:16) 在 D:\projects\cmscart\node_modules\kareem\index.js:259:21 在 D:\projects\cmscart\node_modules\kareem\index.js:127:16 在 _combinedTickCallback (内部/进程/next_tick.js:132:7) 在 process._tickCallback (internal/process/next_tick.js:181:9)

【问题讨论】:

console.log(req.body) 的值是多少? 但是我用过这个 添加行:console.log(req.body); 以上:var title = req.body.title;。尝试向该端点发出 post 请求并向我们展示结果。 title: 'food3' 如果我将 title 的值输入为 food3 它最有可能来自category.title = title; 这一行 - 你会添加一个console.log(category) 行并让我们知道category 是什么吗? 【参考方案1】:

使用

res.redirect('/admin/categories/edit-category/' +category.slug);

而不是

res.redirect('/admin/categories/edit-category/' +id);

并在 edit-category.ejs(您的编辑页面)上方提交按钮 <input type="hidden" name="id" value="<%=id%>">

【讨论】:

以上是关于TypeError:无法将属性“标题”设置为 null的主要内容,如果未能解决你的问题,请参考以下文章

CS50 Uncaught TypeError:无法将属性“禁用”设置为 null [重复]

TypeError:无法将属性'innertext'设置为null

反应:TypeError:无法读取未定义的属性“setState”

mochawesome 的问题:TypeError:无法设置未定义的属性“testsRegistered”

TypeError:无法设置未定义的属性“lint”

未处理的拒绝(TypeError):无法设置未定义的属性“innerHTML”