2015-12-02 61 views
0

我收到了mainimage 未定义错误谁能帮助我如何解决这个错误 的是图像上传和时间戳 改名的东西,但它不工作请帮助Node.js的Multer文件上传错误

这是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 categories = require('./routes/categories'); 


    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 
app.use(multer({dest:'./public/images/uploads'}).single('mainimage')); 

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

// Handle Express Sessions 
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 database accessible to our router 
app.use(function(req, res, next){ 
    req.db = db; 
    next(); 
}) 

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

// 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; 

,这是post.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){ 
     // console.log(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.file); 
    console.log(req.file.mainimage) 
    if(req.file.mainimage){ 
     var mainImageOriginalName = req.file.mainimage.originalname; 
     var mainImageName   = req.file.mainimage.filename; 
     var mainImageMime   = req.file.mainimage.mimetype; 
     var mainImagePath   = req.file.mainimage.path; 
     var mainImageExt   = req.file.mainimage.extension; 
     var mainImageSize   = req.file.mainimage.size; 
     // console.log(mainImageName); 
    } else{ 
     var mainImageName = 'noimage.png'; 
     console.log(mainImageName); 
    } 

    // 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":mainImageName 
     }, function(err, post){ 
      if(err){ 
       res.send('There is an issue submiting the post'); 
      } else { 
       req.flash('Success','Post submitted'); 
       res.location('/'); 
       res.redirect('/'); 
      } 
     }); 
    } 
}); 

module.exports = router; 

这是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='Ankit Baid') Ankit Baid 
       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'); 
+0

什么是'console.log(req.file)'? –

+0

这是印刷此详细 {字段名: 'mainimage', ORIGINALNAME: '1280×720-壁纸抽象-桌面背景高清-壁纸-art.jpg', 编码: '7位', mime类型: '图像/ JPEG', 目的地:” ./public/images/uploads', 文件名: '13e14cb768ccaf0b60a539feadae5c94', 路径: '公共/图像/上传/ 13e14cb768ccaf0b60a539feadae5c94', 大小:249339} 但图像上载在数据库 只有这是每次在数据库'noimage.png'节省 – ankitbaid11326

回答

0

您需要删除的属性mainimage你只需要req.file

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

仍然收到相同的错误 图像正在上传但在数据库中它不是输入文件名 {字段名: 'mainimage', ORIGINALNAME: '排版-165a.jpg', 编码: '7位', mime类型: '图像/ JPEG', 目的地:” ./public/images/uploads', 文件名: 'a4e4ec724aa9b7189ebc7497f81ebf98', 路径: '公共/图像/上传/ a4e4ec724aa9b7189ebc7497f81ebf98', 大小:619043} noimage.png 看到他们在过去的显示“noimage.png” 只有当其他部分正在执行 – ankitbaid11326

+0

你是否改变条件为'if(req.file){'? –

+0

它给错误 '无法读取undefined' – ankitbaid11326

0

你的工作断Udemy节点工程系列?你的代码看起来和我的相似,而且我也一直在使用MULTER文件上传。你在上传目录中看到文件吗?

上传目录中有我的文件。但是当我检查我的mongodb时,图像部分是空白的。

+0

是即时从该系列 学习,但是当我使用'app.use(multer({目的地: './公共/图像/上传 '})单(' mainimage'));' 其工作 '如果(req.file){ \t变种mainImageOriginalName \t = req.file.originalname; \t var mainImageName \t \t \t = req.file.filename; \t var mainImageMime \t \t \t = req.file.mimetype; \t var mainImagePath \t \t \t = req.file.path; \t var mainImageExt \t \t \t = req.file.extension; \t var mainImageSize \t \t \t = req.file.size; \t // console.log(mainImageName); } else { \t var mainImageName ='noimage.png'; \t // console.log(req.file.filename); }' 现在它的工作 如何 – ankitbaid11326

+0

同一个页面上上传多张图片是的,相同的代码工作对我来说太。 –