使用 multer 上传和重定向页面
Upload and redirect page using multer
我在使用 multer
成功上传文件后重定向页面时遇到问题。通过文件上传,我还将一些文本保存到数据库中。这是我的代码。
问题:
当文件和内容保存在数据库中时,如何将页面重定向到新的 URL?
我目前正在使用 res.redirect('product/item');
,但没有任何反应。我也尝试使用 res.render
,但页面没有重定向。
Multer
方法上传文件到Amazon S3
var upload = multer({
storage: multerS3({
s3: s3,
bucket: 'nameofthebucket',
metadata: function (req, file, cb) {
var ext = file.originalname.split('.').pop();
cb(null, {fieldName: 'file.fieldname' + '.' + ext});
},
filename: function(req,file,cb){
var ext = file.originalname.split('.').pop();
cb(null, Date.now() + '.' + ext);
},
key: function (req, file, cb) {
var ext = file.originalname.split('.').pop();
cb(null, Date.now() + '.' + ext);
}
})
})
var upload = upload.array('fileup', 10);
负责上传文件的代码和内容
router.post('/uploadfileandcontent',function(req,res,next){
upload(req,res,function(err) {
if(err) {
} else {
saveRecordsToDB(req, function(err,data){
if (err) {
res.redirect('/errorpage');
} else {
res. redirect('product/item');
}
});
}
});
});
将记录保存到DB并进行回调的函数
function saveRecordsToDB (req, callback){
var args = {
data: {
"name" : req.body.name, //
"age" : req.body.age
},
headers: { "Content-Type": "application/json" }
};
// registering remote methods
client.registerMethod("postMethod", "http://url/uploadfileandcontent", "POST");
var req =client.methods.postMethod(args, function (data, response) {
callback(null, 'success?');
});
req.on('error', function (err) {
console.log('error');
});
}
注意:我也使用了NODE REST CLIENT来发送http请求。
这应该有效。如果没有请告诉我。
router.post('/uploadfileandcontent', function(req,res,next){
upload(req,res,function(err) {
if(err) {
res.send('Error while uploading.');
}
saveRecordsToDB(req, function(err,data){
if (err) {
console.log(err);
req.flash('error', { msg: 'Error while saving data.' }); // Flash message -> need to configure your template to show it
}
// Saved to DB
req.flash('success', { msg: 'Saved' });
res.redirect('/product/item'); // go to this page
});
});
});
更新
您需要包含 const flash = require('express-flash');
才能使用即显消息。然后你可以像这样将它加载到你的应用程序中:app.use(flash());
。 app
像这样加载 express
:const app = express();
.
在您的 HTML 中,您将在数组中访问它。使用 Jade:
的例子
//success
if messages.success
for success in messages.success
div #{success.msg} // Saved
//Error
if messages.errors
for error in messages.errors
div #{error.msg} // Error while saving data.
我在使用 multer
成功上传文件后重定向页面时遇到问题。通过文件上传,我还将一些文本保存到数据库中。这是我的代码。
问题:
当文件和内容保存在数据库中时,如何将页面重定向到新的 URL?
我目前正在使用 res.redirect('product/item');
,但没有任何反应。我也尝试使用 res.render
,但页面没有重定向。
Multer
方法上传文件到Amazon S3
var upload = multer({
storage: multerS3({
s3: s3,
bucket: 'nameofthebucket',
metadata: function (req, file, cb) {
var ext = file.originalname.split('.').pop();
cb(null, {fieldName: 'file.fieldname' + '.' + ext});
},
filename: function(req,file,cb){
var ext = file.originalname.split('.').pop();
cb(null, Date.now() + '.' + ext);
},
key: function (req, file, cb) {
var ext = file.originalname.split('.').pop();
cb(null, Date.now() + '.' + ext);
}
})
})
var upload = upload.array('fileup', 10);
负责上传文件的代码和内容
router.post('/uploadfileandcontent',function(req,res,next){
upload(req,res,function(err) {
if(err) {
} else {
saveRecordsToDB(req, function(err,data){
if (err) {
res.redirect('/errorpage');
} else {
res. redirect('product/item');
}
});
}
});
});
将记录保存到DB并进行回调的函数
function saveRecordsToDB (req, callback){
var args = {
data: {
"name" : req.body.name, //
"age" : req.body.age
},
headers: { "Content-Type": "application/json" }
};
// registering remote methods
client.registerMethod("postMethod", "http://url/uploadfileandcontent", "POST");
var req =client.methods.postMethod(args, function (data, response) {
callback(null, 'success?');
});
req.on('error', function (err) {
console.log('error');
});
}
注意:我也使用了NODE REST CLIENT来发送http请求。
这应该有效。如果没有请告诉我。
router.post('/uploadfileandcontent', function(req,res,next){
upload(req,res,function(err) {
if(err) {
res.send('Error while uploading.');
}
saveRecordsToDB(req, function(err,data){
if (err) {
console.log(err);
req.flash('error', { msg: 'Error while saving data.' }); // Flash message -> need to configure your template to show it
}
// Saved to DB
req.flash('success', { msg: 'Saved' });
res.redirect('/product/item'); // go to this page
});
});
});
更新
您需要包含 const flash = require('express-flash');
才能使用即显消息。然后你可以像这样将它加载到你的应用程序中:app.use(flash());
。 app
像这样加载 express
:const app = express();
.
在您的 HTML 中,您将在数组中访问它。使用 Jade:
的例子//success
if messages.success
for success in messages.success
div #{success.msg} // Saved
//Error
if messages.errors
for error in messages.errors
div #{error.msg} // Error while saving data.