Node.js 如何使用NodeJS和express上传图像?
我想将图像上传到指定文件夹,并将路径保存在带有mongoose和multer模块的模型中 我添加了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
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)的表单所以您需要使用多部分/表单数据
——这应该不是您的问题。。。