0

fichier Server.jsComment éviter une erreur de serveur interne sans utiliser la clause try catch dans le noeud js?

var express = require('express'); 
var path = require('path'); 
var logger = require('morgan'); 
var bodyParser = require('body-parser'); 
var fs = require('fs'); 
var app = express(); 
var os = require('os'); 
//app.use(logger('dev')); 
app.use(bodyParser.json()); 

app.all('/*', function (req, res, next) { 
    // CORS headers 
    res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); 
    // Set custom headers for CORS 
    res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key'); 
    if (req.method == 'OPTIONS') { 
     res.status(200).end(); 
    } else { 
     next(); 
    } 
}); 

// Auth Middleware - This will check if the token is valid 
// Only the requests that start with /api/v1/* will be checked for the token. 
// Any URL's that do not follow the below pattern should be avoided unless you 
// are sure that authentication is not needed 
//app.all('/api/v1/*', [require('./middlewares/validateRequest')]); 
app.use('/', require('./routes')); // Write url in the routes.js file 

app.use(function (err, req, res, next) { 
    if (!err) { 
     return next(); 
    } 
    else { 

      return next(); 

    } 
}); 


//404 error handler 


// If no route is matched by now, it must be a 404 
app.use(function (req, res, next) { 
    var err = new Error('URL Not Found'); 
    err.status = 404; 
    var date = new Date(); 
    next(err); 
}); 


// Start the server 
app.set('port', process.env.PORT || 3000); 

var server = app.listen(app.get('port'), function() { 
    console.log('Express server listening on port ' + server.address().port); 
}); 

J'ai lu pour gérer l'erreur interne du serveur Do comme ça. J'ai même essayé aussi, mais il ne fonctionnera pas comme je le voulais

if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    console.log(err.message+'   w'); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 

Comment éviter que de telle sorte que le serveur n'abattu?

Essayé qui pointent trop https://expressjs.com/en/guide/error-handling.html, http://code.runnable.com/UTlPPF-f2W1TAAEU/error-handling-with-express-for-node-js

+0

_ "il ne fonctionnera pas comme je le voulais" _. Qu'est ce que ça veut dire? – robertklep

+0

Si erreur 404 se produit alors la même exception 500 se produit .... S'il y a quelque chose de cassé du côté API, 500 exception ne se produit pas plutôt que d'éteindre le serveur –

+0

Vous montrez trois gestionnaires d'erreur différents et aucun gestionnaire 404, donc Le code que vous utilisez actuellement n'est pas très clair. – robertklep

Répondre

0

Pour toute erreur express middleware manipulation

Catch 404 et en avant pour gestionnaire d'erreur

app.use(function(req, res) { 
    res.status(404).send({ 
     error: 'Not found' 
    }); 
}); 

if (app.get('env') === 'development') { 
    app.use(function(error, req, res, next) { 
     debug('http_status: %d, %s', error.status || 500, error.message); 
     next(error); 
    }); 
} 

app.use(function(error, req, res) { 
    res.status(error.status || 500).send({ 
     error: 'Internal server error' 
    }); 
}); 

Catch les erreurs non interceptées qui ne sont pas enveloppées dans un domaine ou essayez instruction catch

Remarque: Ne pas utiliser dans les modules, mais seulement dans les applications, sinon, nous pourrions avoir plusieurs de ces liens

process.on('exit', function(code) { 

}); 

process.on('uncaughtException', function(err) { 
    console.log(err) 
}); 

process.on('SIGINT', function() { 
    process.exit(0); 
});