2016-06-14 16 views
1

Ich codiere mit Co-Modul auf Segel-Framework.Wie kann ich Ausnahme mit Co-Modul auf Node.js fangen?

Ich möchte InvalidError abfangen, aber das Fehlerprotokoll sagt 'undefined'.

Wie kann ich diesen Code beheben?

Co-Modul kann ErrorType-Spezifikation nicht fangen ??

detail: function (req, res) { 
    co(function *() { 
    let errors = []; 
    const text = req.param('text'); 

    if (text.length <= 0) { 
     throw new InvalidError('text is required'); 
    } 

    }).catch((InvalidError, err) => { 
    sails.log.warn(err); 
    errors.push(err.message); 
    req.flash('errors', errors); 
    res.redirect('/somewhere/view'); 
    }).catch((Error, err) => { 
    sails.log.error(err); 
    res.serverError(err); 
    }); 
} 

Fehlerprotokoll ist hier

warn: undefined 
error: undefined 
error: Sending empty 500 ("Server Error") response 

Antwort

1

Die catch Methode nur ein einziges Argument: err. Versuchen Sie:

.catch(err => { 
    sails.log.warn(err); 
    errors.push(err.message); 
    req.flash('errors', errors); 
    res.redirect('/somewhere/view'); 
}) 
+0

danken Ihnen für Ihren Rat! Ich werde es versuchen! –

1

Sie Bluebird nicht verwenden, sind Sie? Die standard catch method hat nicht error type filtering, müssen Sie tun, dass Sie sich selbst:

.catch(err => { 
    if (err instanceof InvalidError) { 
    sails.log.warn(err); 
    errors.push(err.message); 
    req.flash('errors', errors); 
    res.redirect('/somewhere/view'); 
    } else if (err instanceof Error) { 
    sails.log.error(err); 
    res.serverError(err); 
    } else { 
    console.error("You've thrown a non-error! Shame on you!"); 
    } 
}); 
+0

vielen dank für ihre beratung! Ich benutze Bluebird. Wenn ich Bluebird verwende, kann ich eine andere Option wählen? –

+0

Naja * du * benutzt vielleicht Bluebird, aber 'co' nicht :-) Sie können entweder die globale' Promise' -Variable mit der Bluebirds-Implementierung überschreiben, oder Sie können das Versprechen von 'co (...)' an einen Bluebird übertragen einer wie beschrieben [hier] (http://stackoverflow.com/a/24315410/1048572) und [dort] (http://stackoverflow.com/a/30934440/1048572) – Bergi