Node.js 如何使用NodeJS和express上传图像?

Node.js 如何使用NodeJS和express上传图像?,node.js,pug,Node.js,Pug,我想将图像上传到指定文件夹,并将路径保存在带有mongoose和multer模块的模型中 我添加了ImageSavePath.array(req.body.image[5])如何将文件路径设置为projectmagepath中的字符串?我的档案来了: controller/projectController.js var mongoose = require('mongoose'); var passport = require('passport'); var Project = requir

我想将图像上传到指定文件夹,并将路径保存在带有mongoosemulter模块的模型中

我添加了
ImageSavePath.array(req.body.image[5])如何将文件路径设置为
projectmagepath
中的字符串?我的档案来了:

controller/projectController.js

var mongoose = require('mongoose');
var passport = require('passport');
var Project = require('../models/projects');
var multer = require('multer');
var ImageSavePath = multer({
  dest: '../userFiles/projectImage',
  rename: function (fieldname, filename) {
    return filename.replace(/\W+/g, '-').toLowerCase() + Date.now();
  });
}
module.exports = {

    plain : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/resume', {
        // resume page view parameters
        title : "proyectos",
        user : req.user,
      });
    },
    create : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/create', {
        // resume page view parameters
        title : "Crear proyecto",
        user : req.user,
        projectName: "Nombre del proyecto",
        image: "Subir imágen",
        plane: "Subir plano en formato PDF",
        details: "Detalles, información sobre el proyecto.",
        ammount: "¿Cual es el coste de esto?",
        location: "Localización",

      });
    },
    saveProject : function (req, res){
      ImageSavePath.array(req.body.image[5]);
      var saveProject = new Project({
        ProjectOwner : req.user._id,
        ProjectName : req.body.projectName,
        ProjectDetails : req.body.projectDetails
        ProjectImagePath : ImageSavePath,
        ProjectPdfPath : req.body.plane,
        ProjectAmount : req.body.ammount,
        ProjectLocation : req.body.localize,
      });
      saveProject.save(function(err){
        if(err){
          res.render('project/create', {
            title: "La información no es válida, volver a introducir los datos",
          });
        }
      });
    },
  }
var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var project = new Schema({
  ProjectOwner: String,
  ProjectName: String,
  ProjectDetails: String,
  ProjectImagePath: [String],
  ProjectPdfPath: String,
  ProjectLocation: Number,
  ProjectAmount: String,
  });

module.exports = mongoose.model('project', project);
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var router = express.Router();


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var session = require('express-session');

var index = require('./routes/index');
var users = require('./routes/users');
var projects = require('./routes/projects');

var app = express();
// para devolver estado por consola.
app.use(morgan('combined'));
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
var Account = require('./models/accounts');
passport.use(new LocalStrategy(Account.authenticate()));
passport.serializeUser(Account.serializeUser());
passport.deserializeUser(Account.deserializeUser());

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

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

app.use(require('express-session')({
    secret: 'topSecret',
    resave: true,
    saveUninitialized: true,
    cookie: { maxAge : 3600000 } //1 Hour
}));

app.use(passport.initialize());
app.use(passport.session());
//Rutas express
app.use('/', index);
app.use('/user', users);
app.use('/project', projects);

// 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: {}
  });
});

mongoose.connect('mongodb://localhost/database');

module.exports = app;
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var multer = require('multer');
var router = express.Router();
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '../userFiles/projectImage')
  },
  filename: function (req, file, cb) {
    cb(null, "UploadedOn" + Date.now() + "fileOrigName" + file.originalname)
  }
})
var upload = multer({ storage: storage});


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', upload.single('image'), controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
models/projects.js

var mongoose = require('mongoose');
var passport = require('passport');
var Project = require('../models/projects');
var multer = require('multer');
var ImageSavePath = multer({
  dest: '../userFiles/projectImage',
  rename: function (fieldname, filename) {
    return filename.replace(/\W+/g, '-').toLowerCase() + Date.now();
  });
}
module.exports = {

    plain : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/resume', {
        // resume page view parameters
        title : "proyectos",
        user : req.user,
      });
    },
    create : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/create', {
        // resume page view parameters
        title : "Crear proyecto",
        user : req.user,
        projectName: "Nombre del proyecto",
        image: "Subir imágen",
        plane: "Subir plano en formato PDF",
        details: "Detalles, información sobre el proyecto.",
        ammount: "¿Cual es el coste de esto?",
        location: "Localización",

      });
    },
    saveProject : function (req, res){
      ImageSavePath.array(req.body.image[5]);
      var saveProject = new Project({
        ProjectOwner : req.user._id,
        ProjectName : req.body.projectName,
        ProjectDetails : req.body.projectDetails
        ProjectImagePath : ImageSavePath,
        ProjectPdfPath : req.body.plane,
        ProjectAmount : req.body.ammount,
        ProjectLocation : req.body.localize,
      });
      saveProject.save(function(err){
        if(err){
          res.render('project/create', {
            title: "La información no es válida, volver a introducir los datos",
          });
        }
      });
    },
  }
var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var project = new Schema({
  ProjectOwner: String,
  ProjectName: String,
  ProjectDetails: String,
  ProjectImagePath: [String],
  ProjectPdfPath: String,
  ProjectLocation: Number,
  ProjectAmount: String,
  });

module.exports = mongoose.model('project', project);
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var router = express.Router();


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var session = require('express-session');

var index = require('./routes/index');
var users = require('./routes/users');
var projects = require('./routes/projects');

var app = express();
// para devolver estado por consola.
app.use(morgan('combined'));
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
var Account = require('./models/accounts');
passport.use(new LocalStrategy(Account.authenticate()));
passport.serializeUser(Account.serializeUser());
passport.deserializeUser(Account.deserializeUser());

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

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

app.use(require('express-session')({
    secret: 'topSecret',
    resave: true,
    saveUninitialized: true,
    cookie: { maxAge : 3600000 } //1 Hour
}));

app.use(passport.initialize());
app.use(passport.session());
//Rutas express
app.use('/', index);
app.use('/user', users);
app.use('/project', projects);

// 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: {}
  });
});

mongoose.connect('mongodb://localhost/database');

module.exports = app;
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var multer = require('multer');
var router = express.Router();
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '../userFiles/projectImage')
  },
  filename: function (req, file, cb) {
    cb(null, "UploadedOn" + Date.now() + "fileOrigName" + file.originalname)
  }
})
var upload = multer({ storage: storage});


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', upload.single('image'), controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
routes/projects.js

var mongoose = require('mongoose');
var passport = require('passport');
var Project = require('../models/projects');
var multer = require('multer');
var ImageSavePath = multer({
  dest: '../userFiles/projectImage',
  rename: function (fieldname, filename) {
    return filename.replace(/\W+/g, '-').toLowerCase() + Date.now();
  });
}
module.exports = {

    plain : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/resume', {
        // resume page view parameters
        title : "proyectos",
        user : req.user,
      });
    },
    create : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/create', {
        // resume page view parameters
        title : "Crear proyecto",
        user : req.user,
        projectName: "Nombre del proyecto",
        image: "Subir imágen",
        plane: "Subir plano en formato PDF",
        details: "Detalles, información sobre el proyecto.",
        ammount: "¿Cual es el coste de esto?",
        location: "Localización",

      });
    },
    saveProject : function (req, res){
      ImageSavePath.array(req.body.image[5]);
      var saveProject = new Project({
        ProjectOwner : req.user._id,
        ProjectName : req.body.projectName,
        ProjectDetails : req.body.projectDetails
        ProjectImagePath : ImageSavePath,
        ProjectPdfPath : req.body.plane,
        ProjectAmount : req.body.ammount,
        ProjectLocation : req.body.localize,
      });
      saveProject.save(function(err){
        if(err){
          res.render('project/create', {
            title: "La información no es válida, volver a introducir los datos",
          });
        }
      });
    },
  }
var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var project = new Schema({
  ProjectOwner: String,
  ProjectName: String,
  ProjectDetails: String,
  ProjectImagePath: [String],
  ProjectPdfPath: String,
  ProjectLocation: Number,
  ProjectAmount: String,
  });

module.exports = mongoose.model('project', project);
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var router = express.Router();


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var session = require('express-session');

var index = require('./routes/index');
var users = require('./routes/users');
var projects = require('./routes/projects');

var app = express();
// para devolver estado por consola.
app.use(morgan('combined'));
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
var Account = require('./models/accounts');
passport.use(new LocalStrategy(Account.authenticate()));
passport.serializeUser(Account.serializeUser());
passport.deserializeUser(Account.deserializeUser());

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

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

app.use(require('express-session')({
    secret: 'topSecret',
    resave: true,
    saveUninitialized: true,
    cookie: { maxAge : 3600000 } //1 Hour
}));

app.use(passport.initialize());
app.use(passport.session());
//Rutas express
app.use('/', index);
app.use('/user', users);
app.use('/project', projects);

// 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: {}
  });
});

mongoose.connect('mongodb://localhost/database');

module.exports = app;
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var multer = require('multer');
var router = express.Router();
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '../userFiles/projectImage')
  },
  filename: function (req, file, cb) {
    cb(null, "UploadedOn" + Date.now() + "fileOrigName" + file.originalname)
  }
})
var upload = multer({ storage: storage});


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', upload.single('image'), controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
app.js

var mongoose = require('mongoose');
var passport = require('passport');
var Project = require('../models/projects');
var multer = require('multer');
var ImageSavePath = multer({
  dest: '../userFiles/projectImage',
  rename: function (fieldname, filename) {
    return filename.replace(/\W+/g, '-').toLowerCase() + Date.now();
  });
}
module.exports = {

    plain : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/resume', {
        // resume page view parameters
        title : "proyectos",
        user : req.user,
      });
    },
    create : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/create', {
        // resume page view parameters
        title : "Crear proyecto",
        user : req.user,
        projectName: "Nombre del proyecto",
        image: "Subir imágen",
        plane: "Subir plano en formato PDF",
        details: "Detalles, información sobre el proyecto.",
        ammount: "¿Cual es el coste de esto?",
        location: "Localización",

      });
    },
    saveProject : function (req, res){
      ImageSavePath.array(req.body.image[5]);
      var saveProject = new Project({
        ProjectOwner : req.user._id,
        ProjectName : req.body.projectName,
        ProjectDetails : req.body.projectDetails
        ProjectImagePath : ImageSavePath,
        ProjectPdfPath : req.body.plane,
        ProjectAmount : req.body.ammount,
        ProjectLocation : req.body.localize,
      });
      saveProject.save(function(err){
        if(err){
          res.render('project/create', {
            title: "La información no es válida, volver a introducir los datos",
          });
        }
      });
    },
  }
var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var project = new Schema({
  ProjectOwner: String,
  ProjectName: String,
  ProjectDetails: String,
  ProjectImagePath: [String],
  ProjectPdfPath: String,
  ProjectLocation: Number,
  ProjectAmount: String,
  });

module.exports = mongoose.model('project', project);
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var router = express.Router();


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var session = require('express-session');

var index = require('./routes/index');
var users = require('./routes/users');
var projects = require('./routes/projects');

var app = express();
// para devolver estado por consola.
app.use(morgan('combined'));
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
var Account = require('./models/accounts');
passport.use(new LocalStrategy(Account.authenticate()));
passport.serializeUser(Account.serializeUser());
passport.deserializeUser(Account.deserializeUser());

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

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

app.use(require('express-session')({
    secret: 'topSecret',
    resave: true,
    saveUninitialized: true,
    cookie: { maxAge : 3600000 } //1 Hour
}));

app.use(passport.initialize());
app.use(passport.session());
//Rutas express
app.use('/', index);
app.use('/user', users);
app.use('/project', projects);

// 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: {}
  });
});

mongoose.connect('mongodb://localhost/database');

module.exports = app;
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var multer = require('multer');
var router = express.Router();
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '../userFiles/projectImage')
  },
  filename: function (req, file, cb) {
    cb(null, "UploadedOn" + Date.now() + "fileOrigName" + file.originalname)
  }
})
var upload = multer({ storage: storage});


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', upload.single('image'), controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
项目/创建.jade

extends ../includes/layout

block content
  div(class="wrap")
    include ../includes/header
    div(class="column-group vertical-space")
      div(class="all-50 push-center")
        div(class="all-100")
          h1 #{title}
        div(class="all-100")
        form(role="form" method="post" action="create" enctype="multipart/form-data")
          p #{projectName}
          input(type="text" name="projectName" required)
          p #{image}
          input(type="file" name="image")
          p #{plane}
          input(type="file" name="plane")
          p #{details}
          input(type="text" name="details")
          p #{ammount}
          input(type="number" name="ammount")
          p #{location}
          input(type="text" name="localize")
          button(type="submit") Enviar
    div(class="push")
  include ../includes/footer

部分解决


在create.jade模板中的
enctype=“multipart/form data”
的表单中使用有问题,如果没有这个,我可以将字段信息添加到
req.body
属性中,如req.body.projectName、
req.body.plane、
req.body.details
。。。我需要解决enctype出现的问题,并将文件保存在一个文件夹中,路径保存在数据库中。

部分解决。


在create.jade模板中的
enctype=“multipart/form data”
的表单中使用有问题,如果没有这个,我可以将字段信息添加到
req.body
属性中,如req.body.projectName、
req.body.plane、
req.body.details
。。。我需要解决enctype的问题,并将文件保存在一个文件夹中,路径保存在数据库中。

已解决

最后,我必须更改上面对routes/projects.js文件的multer调用,并将req.file.path属性添加到controllers/projectController.js文件的projectmagepath中

下面是代码:

routes/projects.js

var mongoose = require('mongoose');
var passport = require('passport');
var Project = require('../models/projects');
var multer = require('multer');
var ImageSavePath = multer({
  dest: '../userFiles/projectImage',
  rename: function (fieldname, filename) {
    return filename.replace(/\W+/g, '-').toLowerCase() + Date.now();
  });
}
module.exports = {

    plain : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/resume', {
        // resume page view parameters
        title : "proyectos",
        user : req.user,
      });
    },
    create : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/create', {
        // resume page view parameters
        title : "Crear proyecto",
        user : req.user,
        projectName: "Nombre del proyecto",
        image: "Subir imágen",
        plane: "Subir plano en formato PDF",
        details: "Detalles, información sobre el proyecto.",
        ammount: "¿Cual es el coste de esto?",
        location: "Localización",

      });
    },
    saveProject : function (req, res){
      ImageSavePath.array(req.body.image[5]);
      var saveProject = new Project({
        ProjectOwner : req.user._id,
        ProjectName : req.body.projectName,
        ProjectDetails : req.body.projectDetails
        ProjectImagePath : ImageSavePath,
        ProjectPdfPath : req.body.plane,
        ProjectAmount : req.body.ammount,
        ProjectLocation : req.body.localize,
      });
      saveProject.save(function(err){
        if(err){
          res.render('project/create', {
            title: "La información no es válida, volver a introducir los datos",
          });
        }
      });
    },
  }
var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var project = new Schema({
  ProjectOwner: String,
  ProjectName: String,
  ProjectDetails: String,
  ProjectImagePath: [String],
  ProjectPdfPath: String,
  ProjectLocation: Number,
  ProjectAmount: String,
  });

module.exports = mongoose.model('project', project);
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var router = express.Router();


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var session = require('express-session');

var index = require('./routes/index');
var users = require('./routes/users');
var projects = require('./routes/projects');

var app = express();
// para devolver estado por consola.
app.use(morgan('combined'));
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
var Account = require('./models/accounts');
passport.use(new LocalStrategy(Account.authenticate()));
passport.serializeUser(Account.serializeUser());
passport.deserializeUser(Account.deserializeUser());

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

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

app.use(require('express-session')({
    secret: 'topSecret',
    resave: true,
    saveUninitialized: true,
    cookie: { maxAge : 3600000 } //1 Hour
}));

app.use(passport.initialize());
app.use(passport.session());
//Rutas express
app.use('/', index);
app.use('/user', users);
app.use('/project', projects);

// 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: {}
  });
});

mongoose.connect('mongodb://localhost/database');

module.exports = app;
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var multer = require('multer');
var router = express.Router();
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '../userFiles/projectImage')
  },
  filename: function (req, file, cb) {
    cb(null, "UploadedOn" + Date.now() + "fileOrigName" + file.originalname)
  }
})
var upload = multer({ storage: storage});


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', upload.single('image'), controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
控制器/projectController.js代码

saveProject : function (req, res, file){
      var savingProject = new Project({
        ProjectOwner : req.user._id,
        ProjectName : req.body.projectName,
        ProjectDetails : req.body.details,
        ProjectImagePath : req.file.path,
        //ProjectPdfPath : .plane,
        ProjectAmount : req.body.ammount,
        ProjectLocation : req.body.localize,
      });
        console.log("***start viewing content from req.body***");
        console.log(req.body);
        console.log("***start viewing content from req.file***");
        console.log(req.file);
        console.log("***start viewing content from savingProject variable***");
        console.log(savingProject);
      savingProject.save(function(err){
        if(err){
          console.log(err);
          res.render('project/create', {
            title: "La información no es válida, volver a introducir los datos",
          });
        }
        if(!err){res.send('ok');}
      });
    },
控制台日志

***start viewing content from req.body***
{ projectName: 'testingproj',
  details: 'dwada',
  ammount: '111111111',
  localize: 'dwada' }
***start viewing content from req.file***
{ fieldname: 'image',
  originalname: '13062537_587472701434355_1300164321309994729_n.jpg',
  encoding: '7bit',
  mimetype: 'image/jpeg',
  destination: '../userFiles/projectImage',
  filename: 'UploadedOn1462292710895fileOrigName13062537_587472701434355_1300164321309994729_n.jpg',
  path: '../userFiles/projectImage/UploadedOn1462292710895fileOrigName13062537_587472701434355_1300164321309994729_n.jpg',
  size: 88911 }
***start viewing content from savingProject variable***
{ _id: 5728d0e6552274ac2286a84c,
  ProjectLocation: 'dwada',
  ProjectAmount: 111111111,
  ProjectImagePath: '../userFiles/projectImage/UploadedOn1462292710895fileOrigName13062537_587472701434355_1300164321309994729_n.jpg',
  ProjectDetails: 'dwada',
  ProjectName: 'testingproj',
  ProjectOwner: '5720977ffe0697f51001c9a1' }

解决了

最后,我必须更改上面对routes/projects.js文件的multer调用,并将req.file.path属性添加到controllers/projectController.js文件的projectmagepath中

下面是代码:

routes/projects.js

var mongoose = require('mongoose');
var passport = require('passport');
var Project = require('../models/projects');
var multer = require('multer');
var ImageSavePath = multer({
  dest: '../userFiles/projectImage',
  rename: function (fieldname, filename) {
    return filename.replace(/\W+/g, '-').toLowerCase() + Date.now();
  });
}
module.exports = {

    plain : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/resume', {
        // resume page view parameters
        title : "proyectos",
        user : req.user,
      });
    },
    create : function (req, res) {
      //Datos cocinados con la respuesta...
      if(!req.user){
        res.redirect('/user/login');
      }
      res.render('project/create', {
        // resume page view parameters
        title : "Crear proyecto",
        user : req.user,
        projectName: "Nombre del proyecto",
        image: "Subir imágen",
        plane: "Subir plano en formato PDF",
        details: "Detalles, información sobre el proyecto.",
        ammount: "¿Cual es el coste de esto?",
        location: "Localización",

      });
    },
    saveProject : function (req, res){
      ImageSavePath.array(req.body.image[5]);
      var saveProject = new Project({
        ProjectOwner : req.user._id,
        ProjectName : req.body.projectName,
        ProjectDetails : req.body.projectDetails
        ProjectImagePath : ImageSavePath,
        ProjectPdfPath : req.body.plane,
        ProjectAmount : req.body.ammount,
        ProjectLocation : req.body.localize,
      });
      saveProject.save(function(err){
        if(err){
          res.render('project/create', {
            title: "La información no es válida, volver a introducir los datos",
          });
        }
      });
    },
  }
var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var project = new Schema({
  ProjectOwner: String,
  ProjectName: String,
  ProjectDetails: String,
  ProjectImagePath: [String],
  ProjectPdfPath: String,
  ProjectLocation: Number,
  ProjectAmount: String,
  });

module.exports = mongoose.model('project', project);
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var router = express.Router();


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var mongoose = require('mongoose');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var session = require('express-session');

var index = require('./routes/index');
var users = require('./routes/users');
var projects = require('./routes/projects');

var app = express();
// para devolver estado por consola.
app.use(morgan('combined'));
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
var Account = require('./models/accounts');
passport.use(new LocalStrategy(Account.authenticate()));
passport.serializeUser(Account.serializeUser());
passport.deserializeUser(Account.deserializeUser());

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

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

app.use(require('express-session')({
    secret: 'topSecret',
    resave: true,
    saveUninitialized: true,
    cookie: { maxAge : 3600000 } //1 Hour
}));

app.use(passport.initialize());
app.use(passport.session());
//Rutas express
app.use('/', index);
app.use('/user', users);
app.use('/project', projects);

// 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: {}
  });
});

mongoose.connect('mongodb://localhost/database');

module.exports = app;
var express = require('express');
var controller = require('../controllers/projectController');
var passport = require('passport');
var multer = require('multer');
var router = express.Router();
var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '../userFiles/projectImage')
  },
  filename: function (req, file, cb) {
    cb(null, "UploadedOn" + Date.now() + "fileOrigName" + file.originalname)
  }
})
var upload = multer({ storage: storage});


router.get('/', controller.plain);
router.get('/create', controller.create);
router.post('/create', upload.single('image'), controller.saveProject);
//router.get('/edit', controller.create);
//router.post('/create', controller.save);
//router.get('/delete', controller.delete);
module.exports = router;
控制器/projectController.js代码

saveProject : function (req, res, file){
      var savingProject = new Project({
        ProjectOwner : req.user._id,
        ProjectName : req.body.projectName,
        ProjectDetails : req.body.details,
        ProjectImagePath : req.file.path,
        //ProjectPdfPath : .plane,
        ProjectAmount : req.body.ammount,
        ProjectLocation : req.body.localize,
      });
        console.log("***start viewing content from req.body***");
        console.log(req.body);
        console.log("***start viewing content from req.file***");
        console.log(req.file);
        console.log("***start viewing content from savingProject variable***");
        console.log(savingProject);
      savingProject.save(function(err){
        if(err){
          console.log(err);
          res.render('project/create', {
            title: "La información no es válida, volver a introducir los datos",
          });
        }
        if(!err){res.send('ok');}
      });
    },
控制台日志

***start viewing content from req.body***
{ projectName: 'testingproj',
  details: 'dwada',
  ammount: '111111111',
  localize: 'dwada' }
***start viewing content from req.file***
{ fieldname: 'image',
  originalname: '13062537_587472701434355_1300164321309994729_n.jpg',
  encoding: '7bit',
  mimetype: 'image/jpeg',
  destination: '../userFiles/projectImage',
  filename: 'UploadedOn1462292710895fileOrigName13062537_587472701434355_1300164321309994729_n.jpg',
  path: '../userFiles/projectImage/UploadedOn1462292710895fileOrigName13062537_587472701434355_1300164321309994729_n.jpg',
  size: 88911 }
***start viewing content from savingProject variable***
{ _id: 5728d0e6552274ac2286a84c,
  ProjectLocation: 'dwada',
  ProjectAmount: 111111111,
  ProjectImagePath: '../userFiles/projectImage/UploadedOn1462292710895fileOrigName13062537_587472701434355_1300164321309994729_n.jpg',
  ProjectDetails: 'dwada',
  ProjectName: 'testingproj',
  ProjectOwner: '5720977ffe0697f51001c9a1' }

嗨,挑剔的人,你好吗?代替这些路由:
router.get('/create',controller.create)
router.post('/create',projectController.saveProject),更加restful,避免使用动词。您正在阅读和创建项目,因此选择
router.get('/project/:id',projectController.read)
router.post('/project',projectController.create)。从长远来看,这会让你的生活更轻松。谢谢你,诺德曼,但这不是问题所在。在
saveProject
上,在
ImageSavePath.array(req.body.image[5])之后,如果执行console.log(ImageSavePath),您会看到什么。它是一个包含路径的字符串元素的数组吗?此行不起作用。错误是什么?或者没有错误,只是空字符串?其他一切都正常吗?Multer正在正确处理文件,您就是无法获取文件名?我正在检查multer页面,没有看到“重命名”选项
ImageSavePath
是一个multer对象,而
.array
只是将数据传递给它,对吗?您正在尝试将multer对象保存为模型上的字符串。您是否检查过是否有类似于
ImageSavePath.filename
的内容可以传递给您的模型?嗨,这里的挑剔者,你好吗?代替这些路由:
router.get('/create',controller.create)
router.post('/create',projectController.saveProject),更加restful,避免使用动词。您正在阅读和创建项目,因此选择
router.get('/project/:id',projectController.read)
router.post('/project',projectController.create)。从长远来看,这会让你的生活更轻松。谢谢你,诺德曼,但这不是问题所在。在
saveProject
上,在
ImageSavePath.array(req.body.image[5])之后,如果执行console.log(ImageSavePath),您会看到什么。它是一个包含路径的字符串元素的数组吗?此行不起作用。错误是什么?或者没有错误,只是空字符串?其他一切都正常吗?Multer正在正确处理文件,您就是无法获取文件名?我正在检查multer页面,没有看到“重命名”选项
ImageSavePath
是一个multer对象,而
.array
只是将数据传递给它,对吗?您正在尝试将multer对象保存为模型上的字符串。您是否检查过是否有类似于
ImageSavePath.filename
的内容可以传递给您的模型?来自multer文档():注意:multer不会处理任何非multipart的表单(multipart/form data)。--因此,您需要使用
multipart/form data
——这应该不是您的问题……来自multer文档():注意:multer不会处理任何非multipart(multipart/form data)的表单所以您需要使用
多部分/表单数据
——这应该不是您的问题。。。