Загрузить и перенаправить страницу, используя 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');

                }

            });


        }

    });



});

Функция, которая сохраняет записи в БД и выполняет обратный вызов

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-запроса.

1 ответ

Решение

Это должно работать. Скажи мне, если это не так.

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.
Другие вопросы по тегам