Страница перенаправления после остановки загрузки с использованием Nodejs и multer

Я новичок в Node.js и экспресс-фреймворке.
Я хотел создать службу для загрузки файла, где он будет отображать изображение, если тип файла является изображением. Если файл не является изображением, он должен отображать сообщение об ошибке для пользователя. Я использую multer для загрузки файла, и если расширение файла не совпадает ни с одним из предопределенных расширений, оно вернет false, чтобы остановить процесс загрузки. Но почему-то он не перенаправляет страницу на страницу с ошибкой, если загрузка остановлена.
Возврат false остановил весь процесс POST? Есть ли способ отобразить сообщение об ошибке, если загрузка остановлена?

module.exports=function(app)
{
    var express=require('express');
    var multer=require('multer');
    var path=require('path');
    var fs=require('fs');
    var bodyParser=require('body-parser');
    var done = false;
    var targetPath="";

    app.use(bodyParser.urlencoded({uploadDir: '/uploads',extended:true, keepExtensions:true}));

    app.use(function(req,res,next)
    {
        var handler = multer({ dest: './uploads/',
        rename: function (fieldname, filename) {
        return filename+Date.now();
        },
        onFileUploadStart: function (file) {
        if(file.extension != 'png' && file.extension != 'jpg' && file.extension != 'jpeg' && file.extension != 'gif')
        {   
            done = false;
            return false;
        }
        console.log(file.originalname + ' is starting ...')
        },
        onFileUploadComplete: function (file) {
        console.log(file.fieldname + ' uploaded to  ' + file.path)
        targetPath = file.path;
        done = true;
        }
        });
        handler(req, res, next);
    });

    app.get('/',function (req,res)
    {
        res.render('newindex.jade')
    });

    app.get('/errorpage', function (req,res)
    {
        res.render('errorpage.jade')
    })

    app.post('/uploads', function (req,res)
    {
        if(done = true)
        {
            console.log(req.files);
            //res.end("Image has been uploaded at " + targetPath);
            res.redirect("/" + targetPath);
            targetPath="";
            //res.send('<img src="' + targetPath + '">');
        }       
        else
        {
            res.redirect("./errorpage")
        }
     });

    app.get('/uploads/:file', function (req, res)
    {
        file = req.params.file;
        var img = fs.readFileSync("./" + "/uploads/" + file);
        res.writeHead(200);
        res.end(img, 'binary');
    });

}

person Clueless_Coder    schedule 16.02.2015    source источник


Ответы (1)


Я думаю, что вы можете добавить req, res в onFileUploadStart() и вставить res.doSomething() до того, как строка вернет false;. Например:

onFileUploadStart: функция (файл, запрос, разрешение) {

   {   
       done = false;
       res.json({message: "Upload failed"})
       return false;
   }
   console.log(file.originalname + ' is starting ...')
   }
person toppu    schedule 26.03.2015