Jade не может прочитать длину свойства

У меня свой пост.js as

var express = require('express');
var router = express.Router();
var mongo = require('mongodb');
var db = require('monk')('localhost/nodeblog');

router.get('/add', function(req, res, next) {
    var categories = db.get('categories');

    categories.find({},{},function (err, categories){
        res.render('addpost', {
            "title": "Add Post",
            'categories': categories
        });
    });
});

router.post('/add', function(req, res, next){
   //get form values
    var title       = req.body.title;
    var category    = req.body.category;
    var body        = req.body.body;
    var author      = req.body.author;
    var date        = new Date();

    console.log(req.body);
    if(req.file){
        var mainImageOriginalName   = req.file.originalname;
        var mainImageName           = req.file.filename;
        var mainImageSize           = req.file.size;
        var mainImageMime           = req.file.mimetype;
        var mainImageExt            = req.file.extension;
        var mainImagePath           = req.file.path;
    } else {
        var mainImageName   = 'noimage.png';
    }

    //form validation
    req.checkBody('title', 'Title field is required').notEmpty();
    req.checkBody('body', 'Body field is required').notEmpty();

    //check errors
    var errors = req.validationErrors();

    if(errors){
        res.render('addpost', {
            'errors'    : errors,
            'title'     : title,
            'body'      : body
            'categories': category
        });
    } else {
        var posts = db.get('posts');

        //submit to db
        posts.insert({
            'title': title,
            'body': body,
            'category': category,
            'date': date,
            'author': author,
            'image': mainImageName
        }, function (err, post){
            if(err){
                res.send('There was an issue submitting the post');
            } else {
                req.flash('success', 'Post submitted');
                res.location('/');
                res.redirect('/');
            }
        });
    }
});

module.exports = router;

и мой addpost.нефрит как

extends layout

block content
    h1=title
    ul.errors
        if errors
            each error, i in errors
                li.alert.alert-danger #{error.msg}

    form(method='post', action='/posts/add', enctype='multipart/form-data')
        .form-group
            label Title
            input.form-control(name='title', type='text')
        .form-group
            label Category
            select.form-control(name='category')
                each category, i in categories
                    option(value='#{category.title}') #{category.title}
        .form-group
            label Body
            textarea.form-control(name='body', id='body')
        .form-group
            label Main Image
            input.form-control(name='image', type='file')
        .form-group
            label Author
            select.form-control(name='author')
                option(value='Shehzad Shaikh') Shehzad Shaikh
                option(value='John Doe') John Doe
        input.btn.btn-default(name='submit', type='submit', value='Save')

        script(src='/ckeditor/ckeditor.js')
        script
            | CKEDITOR.replace('body');

Когда я отправляю форму, это дает мне ошибку, которая говорит

nodeblog/views/addpost.jade:20 18| label Category 19| select.form-control(name='category') > 20| each category, i in categories 21| option(value='#{category.title}') #{category.title} 22| .form-group 23| label Body Cannot read property 'length' of undefined

Я проверил имена переменных, выглядит нормально для меня. Что на самом деле пошло не так?
Кроме того, если что-то не так с полем выбрать, он представляет значения правильно, однако эта проблема появляется при отправке формы.

2 ответа

  1. if(errors){
        res.render('addpost', {
            'errors'    : errors,
            'title'     : title,
            'body'      : body
        });
    }
    

    Из того, что я понимаю, если есть ошибка во время Вашего сообщения, Вы представляете то же самое представление, предоставляя ошибки. Тем не менее, вы не предоставилиcategories, поэтому не определено, когда Jade(Мопс) отображает представление. Я думаю, что это то, откуда происходит ошибка… ?

  2. Я столкнулся с той же проблемой. Добавление условия if в файл jade решило мое.

        .form-group
            label Category
            select.form-control(name='category')
                if categories
                    each category,i in categories
                        option(value='#{category.title}') #{category.title}