Jquery 使用Mongoose保存图像数据

Jquery 使用Mongoose保存图像数据,jquery,node.js,mongodb,express,mongoose,Jquery,Node.js,Mongodb,Express,Mongoose,我正在尝试将图片上传到我的mongoDB,作为事件创建的一部分。这就是我到目前为止所做的: 事件模式: var mongoose = require('mongoose'); var Event = new mongoose.Schema({ author: mongoose.Schema.Types.ObjectId, authorName: String, name: String, priority: Number, status: String,

我正在尝试将图片上传到我的mongoDB,作为事件创建的一部分。这就是我到目前为止所做的:

事件模式:

var mongoose = require('mongoose');
var Event = new mongoose.Schema({
    author: mongoose.Schema.Types.ObjectId,
    authorName: String,
    name: String,
    priority: Number,
    status: String,
    date: Date,
    img: { data: Buffer, contentType: String },
    description: String,
    joinedUsers: [{ 
        username: {
            type: String, 
            required: true, 
            index: { unique: true }
        }, 
        petitionStatus: String 
    }]
});

module.exports = mongoose.model('Event', Event);
form.form-signin(enctype="multipart/form-data",role='form',method='POST',action='/newEvent')
  h2.form-signin-heading Create an Event
  input.form-control(name='name', placeholder='Name of Event', required='', autofocus='')
  textarea.form-control.event-description(placeholder='Please Enter a Description', name='description', required='')
  input.form-control(name='date', type='date', required='')
  input.form-control(name='img', type='file', required='')
  button.btn.btn-lg.btn-primary.btn-block(type='submit') Create
app.post('/newEvent',routes.createEvent);
我的翡翠观:

var mongoose = require('mongoose');
var Event = new mongoose.Schema({
    author: mongoose.Schema.Types.ObjectId,
    authorName: String,
    name: String,
    priority: Number,
    status: String,
    date: Date,
    img: { data: Buffer, contentType: String },
    description: String,
    joinedUsers: [{ 
        username: {
            type: String, 
            required: true, 
            index: { unique: true }
        }, 
        petitionStatus: String 
    }]
});

module.exports = mongoose.model('Event', Event);
form.form-signin(enctype="multipart/form-data",role='form',method='POST',action='/newEvent')
  h2.form-signin-heading Create an Event
  input.form-control(name='name', placeholder='Name of Event', required='', autofocus='')
  textarea.form-control.event-description(placeholder='Please Enter a Description', name='description', required='')
  input.form-control(name='date', type='date', required='')
  input.form-control(name='img', type='file', required='')
  button.btn.btn-lg.btn-primary.btn-block(type='submit') Create
app.post('/newEvent',routes.createEvent);
快速API路线:

var mongoose = require('mongoose');
var Event = new mongoose.Schema({
    author: mongoose.Schema.Types.ObjectId,
    authorName: String,
    name: String,
    priority: Number,
    status: String,
    date: Date,
    img: { data: Buffer, contentType: String },
    description: String,
    joinedUsers: [{ 
        username: {
            type: String, 
            required: true, 
            index: { unique: true }
        }, 
        petitionStatus: String 
    }]
});

module.exports = mongoose.model('Event', Event);
form.form-signin(enctype="multipart/form-data",role='form',method='POST',action='/newEvent')
  h2.form-signin-heading Create an Event
  input.form-control(name='name', placeholder='Name of Event', required='', autofocus='')
  textarea.form-control.event-description(placeholder='Please Enter a Description', name='description', required='')
  input.form-control(name='date', type='date', required='')
  input.form-control(name='img', type='file', required='')
  button.btn.btn-lg.btn-primary.btn-block(type='submit') Create
app.post('/newEvent',routes.createEvent);
我保存事件的方法

functions.createEvent = function(req, res){
    var author; 
    var name = req.param('name');
    var description = req.param('description');
    var date = req.param('date');

    UserSchema.findOne({ username: req.session.passport.user }, function(err, user) {
        if (err) {
            console.log(err);
            res.status(404).json({status: err})
        }
        if (user) {
            author = user.getID();
            console.log(author);

            var record = new EventSchema({
                name: name,
                description: description,
                date:date,
                author:author,
                authorName: req.session.passport.user
            });

            record.save(function(err) {
                if (err) {
                    console.log(err);
                    res.status(500).json({status: err});
                } else {
                    res.redirect('/userEvents');
                }
            });
        }
    });
};
我有Express4,因此不推荐使用bodyparser。如果有人能告诉我一个实现图像上传的好方法,我将不胜感激


提前感谢

在express 4中不推荐使用主体解析器,但是您可以使用busboy,只需配置应用程序即可

app.use(busboy());
然后图像将可以从请求中访问,如

 exports.uploadDocument = function(req,res){
    var fstream;
    req.pipe(req.busboy);
    var doc = new DocumentModel(); // just a example use your own

    req.busboy.on('file',function(fieldname, file, filename, encoding, contentType){
        doc.contentType = contentType;
        doc.encoding= encoding;
        doc.filename= filename;
        file.on('data',function(data){
            doc.content = data;
            doc.size = data.length;
        });
    });