2016-11-11 55 views
0

Jade不是一種容易處理的語言,因爲正確的縮進和什麼不是,但在這種情況下,縮進看起來不是問題,我有Google-Foo'd錯誤,找不到匹配的東西去這裏。這個Jade文件中的錯誤在哪裏?

這是我addpost.jade文件:

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='mainimage', type='file') 
     .form-group 
      label Author 
      select.form-control(name='author') 
       option(value='Daniel Cortes') Daniel Cortes 
       option(value='Alejandra Rocha') Alejandra Rocha 
     input.btn.btn-default(name='submit', type='submit', value='Save') 

這是我收到的錯誤:

addpost.jade:16 14 |標籤類別15 | select.form-control(name ='category')> 16 |每個類別,我在類別17 |選項(值='#{category.title}')#{category.title} 18 | .form-group 19 |標籤的身體不能讀取的不確定

財產 '長度' 這是我的posts.js文件:

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(); 

    if(req.files.mainimage){ 
     var mainImageOriginalName = req.files.mainimage.originalname; 
     var mainImageName   = req.files.mainimage.name; 
     var mainImageMime   = req.files.mainimage.mimetype; 
     var mainImagePath   = req.files.mainimage.path; 
     var mainImageExt   = req.files.mainimage.extension; 
     var mainImageSize   = req.files.mainimage.size; 
    } else { 
     var mainImageName = 'noimage.png'; 
    } 

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

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

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

     // Submit to db 
     posts.insert({ 
      "title": title, 
      "body": body, 
      "category": category, 
      "date": date, 
      "author": author, 
      "mainimage": mainimage 
     }, 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; 

我app.js文件:

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var expressValidator = require('express-validator'); 
var cookieParser = require('cookie-parser'); 
var session = require('express-session'); 
var bodyParser = require('body-parser'); 
var mongo = require('mongodb'); 
var db = require('monk')('localhost/nodeblog'); 
var multer = require('multer'); 
var flash = require('connect-flash'); 

var routes = require('./routes/index'); 
var posts = require('./routes/posts'); 

var app = express(); 

app.locals.moment = require('moment'); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// Handle File Uploads & Multipart Data 
// app.use(multer({dest: './uploads'})); 
app.use(multer({dest:'./uploads/'}).single('singleInputFileName')); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 

// Express Session 
app.use(session({ 
    secret: 'secret', 
    saveUninitialized: true, 
    resave: true 
})); 

// Express Validator 
app.use(expressValidator({ 
    errorFormatter: function(param, msg, value){ 
    var namespace = param.split('.'), 
    root = namespace.shift(), 
    formParam = root; 

    while(namespace.length) { 
     formParam += '[' + namespace.shift() + ']'; 
    } 
    return { 
     param : formParam, 
     msg : msg, 
     value : value 
    }; 
    } 
})); 

app.use(express.static(path.join(__dirname, 'public'))); 

// Connect Flash 
app.use(flash()); 
app.use(function (req, res, next) { 
    res.locals.messages = require('express-messages')(req, res); 
    next(); 
}); 

// Make our db accessible to our router 
app.use(function(req, res, next){ 
    req.db = db; 
    next(); 
}); 

app.use('/', routes); 
app.use('/posts', posts); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 


module.exports = app; 

回答

0

似乎categories是不傳遞給視圖或其不是數組。

您可以添加呈現模板的代碼嗎?可能是我們可以在那裏找到問題。

+0

Yeiniel,我添加了posts.js文件,你是在暗示問題出在那裏? – Daniel

+0

是的。看起來你缺少模板所需的變量 – yeiniel

+0

在表單驗證過程中出現錯誤的情況下,模板呈現將失敗,因爲不包含類別變量 – yeiniel