Je construis ma première application MEAN et je veux la déployer. Elle fonctionne bien sur mon système mais lorsque je la déploie sur Heroku, je reçois une erreur d'application. J'ai exécuté npm start pour vérifier s'il y avait des erreurs dans la console Heroku mais la console a enregistré un message de succès "serveur démarré" ce qui signifie que le serveur node fonctionne correctement.
app.js
const express = require('express');
const bodyParser = require('body-parser');
const session = require('express-session');
const mongoose = require('mongoose');
const mongoStore = require('connect-mongo')(session);
const path = require('path');
const app = express();
const index = require('./routes/index');
// utilisant 'session'
app.use(session({
secret: 'Xiomi',
resave: true,
saveUninitialized: true,
store: new mongoStore({ mongooseConnection: mongoose.connection })
}));
// utilisation des fichiers statiques
app.use(express.static(path.join(__dirname, 'public')));
// utilisation de 'body-parser' dans l'application
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
// rendre l'api accessible
app.use(function(req,res,next){
res.header("Access-Control-Allow-Origin","*");
res.header("Access-Control-Allow-Methods","GET, POST, PUT")
res.header("Access-Control-Allow-Headers","Origin, X-Requested-
With,Content-Type,Authorization,Accept");
next();
});
// utilisation de la route 'index'
app.use('/api',index);
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, '/public/index.html'));
});
// Gérer '404'
app.use((req,res,next) => {
const error = new Error('Non trouvé');
error.status = 404;
next(error);
});
// Gestionnaire d'erreur
app.use((err,req,res,next) => {
res.json({
message:err.message,
err
});
});
module.exports = app;
start.js
// inclus de 'dot env'
require('dotenv').config({path:'info.env'});
// configuration de connexion à mongoose
const mongoose = require('mongoose');
mongoose.connect(process.env.DB,{useMongoClient:true});
mongoose.Promise = global.Promise; // utiliser des promesses Es6
mongoose.connection.on('error',err => {
console.log("Erreur de connexion à Mongoose");
});
// requérir des modèles
require('./models/question');
require('./models/answer');
require('./models/user');
const app = require('./server');
app.set('port',process.env.port||4040);
app.listen(app.get('port'),()=>{
console.log("Serveur démarré");
});
Voici les logs Heroku de mon application :
2017-12-16T02:26:07.368109+00:00 heroku[run.2613]: Démarrage du processus avec la commande `npm start`
2017-12-16T02:26:07.625833+00:00 heroku[run.2613]: L'état est passé de démarrage à actif
2017-12-16T02:26:15.275993+00:00 heroku[run.2613]: Connexion client fermée. Envoi de SIGHUP à tous les processus
2017-12-16T02:26:15.809932+00:00 heroku[run.2613]: L'état est passé de actif à complet
2017-12-16T02:26:15.796854+00:00 heroku[run.2613]: Le processus s'est terminé avec le statut 10
2017-12-16T02:26:21.198223+00:00 heroku[router]: at=error code=H10 desc="Application plantée" méthode=GET chemin="/" hôte=qa-application-mean.herokuapp.com id de demande=5afdf0d7-af4f-47d1-954b-5e0141f116b8 fwd="117.205.140.102" dyno= connect= service= status=503 bytes= protocole=https
2017-12-16T02:26:23.974360+00:00 heroku[router]: at=error code=H10 desc="Application plantée" méthode=GET chemin="/favicon.ico" hôte=qa-application-mean.herokuapp.com id de demande=a6b2524d-8412-45c4-9f0f-5d4fcd15417e fwd="117.205.140.102" dyno= connect= service= status=503 bytes= protocole=https
2017-12-16T02:26:46.596768+00:00 heroku[router]: at=error code=H10 desc="Application plantée" méthode=GET chemin="/api/questions" hôte=qa-application-mean.herokuapp.com id de demande=a8859faa-c2fb-4c88-b295-da472c7b7ecc fwd="117.205.140.102" dyno= connect= service= status=503 bytes= protocole=https
2017-12-16T02:26:48.979172+00:00 heroku[router]: at=error code=H10 desc="Application plantée" méthode=GET chemin="/favicon.ico" hôte=qa-application-mean.herokuapp.com id de demande=f721e237-b4c8-465c-8073-6ab5d93f5160 fwd="117.205.140.102" dyno= connect= service= status=503 bytes= protocole=https