2016-08-12 3 views
2

У меня возникла проблема перенаправления страницы после успешной загрузки файла с помощью multer. При загрузке файла я также сохраняю некоторый текст в базе данных. Вот мой код.Загрузить и перенаправить страницу с помощью multer

Вопрос:

Когда файл и содержимое сохраняются в БД, как я могу перенаправить страницу на новый адрес?

В настоящее время я использую 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 

     }); 

    }); 


}); 

UPDATE Вам нужно будет включать 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. 
+0

Я дам ему попробовать. Можете ли вы также рассказать мне, как я могу получить «msg» с HTML-страницы? – Illep

+0

Обновлено с более подробной информацией – agaezcode

Смежные вопросы