Je suis assez nouveau pour toutes ces technologies (y compris un peu de JavaScript), vous devrez donc peut-être supporter avec moi ici.
J'ai suivi le didacticiel de ChatApp sur Socket.IO docs assez étroitement et modifié l'application à mon goût quelque peu; Cependant, je ne pense pas avoir beaucoup changé du côté de l'interaction serveur, etc. Mon problème est que peu importe ce que je fais, je n'arrive pas à faire en sorte que mon application s'exécute avec succès sur Heroku. Je reçois ce message d'erreur en essayant de charger l'application:
Erreur d'application Une erreur s'est produite dans l'application et votre page n'a pas pu être servie. Merci de réessayer dans quelques instants. Si vous êtes le propriétaire de l'application, consultez vos journaux pour plus de détails.
Je ne sais pas s'il me manque quelque chose d'évident ou quoi.
Voici mon fichier principal index.js:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendfile('index.html');
});
app.use("/css", express.static(__dirname + '/css'));
//array of users currently in chat
var people = {};
io.on('connection', function(socket){
console.log('user connected!');
socket.on('join', function(name){
people[socket.id] = name; //create entry in 'people' with new user
socket.emit("update", "You have connected to the server.");
io.sockets.emit("update", name + " has joined the server.");
io.sockets.emit("update_people_list", people);
});
socket.on('disconnect', function(){
console.log('user disconnected!');
if(people[socket.id] != ""){
io.sockets.emit("update", people[socket.id] + " has left the server.");
delete people[socket.id];
io.sockets.emit("update_people_list", people);
}
});
socket.on('chat message', function(msg){
console.log('message: ' + msg);
io.sockets.emit('chat message', people[socket.id], msg);
});
});
// http.listen(3000, function(){
// console.log('listening on *:3000');
// });
index.html
<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery.js"></script>
<script>
$(document).ready(function(){
var ready = false;
var socket = io.connect();
$("#chat").hide();
$(".canvasDiv").hide();
$("#name").focus();
//prevent form from being submitted without name
$("form").submit(function(event){
event.preventDefault();
});
//allows entering by hitting 'Enter' for name
$("#name").keypress(function(e){
if(e.which == 13) { //if ENTER key
var name = $("#name").val();
if(name != ""){
socket.emit("join", name);
$("#login").detach();
$("#chat").show();
$("#msg").focus();
ready = true;
}
}
});
$('#chatform').submit(function(){ //when submit chat message
socket.emit('chat message', $('#msg').val()); //emit message + value of input
$('#msg').val(''); //empty field?
return false; //so that the page doesn't refresh
});
//SOCKET LISTENING
socket.on('chat message', function(user, msg){
if(ready){
$('#messages').append("<p><strong><span class='chat-user'>" + htmlEntities(user) + " </span></strong>: " + htmlEntities(msg) + "</p>");
//adjust height and scroll as need be:
var $container = $('#messages');
var height = $container.get(0).scrollHeight;
$container.scrollTop(height);
}
});
socket.on("update", function(io_message){
if(ready){
$('#messages').append("<p class='notification'>" + htmlEntities(io_message) + "</p>")
}
});
socket.on("update_people_list", function(people){
if(ready){
$("#people").empty(); //clear to refresh it
$.each(people, function(client_id, name){
$('#people').append("<p class='notification'>" + htmlEntities(name) + "</p>");
});
var $container = $("#messages");
var height = $container.get(0).scrollHeight;
$container.scrollTop(height);
}
});
});
</script>
De plus, mon fichier package.json
{
"name": "socket-chat-example",
"version": "0.0.1",
"description": "my first socket.io app",
"dependencies": {
"express": "^4.6.1",
"socket.io": "^1.0.6"
}
}
Procfile:
web: node index.js
.gitignore:
node_modules/
Divulgation: je suis le propriétaire de la plate-forme nodale chez Heroku
Tout d'abord, vous devez exécuter heroku logs
pour obtenir la sortie de journalisation.
Deuxièmement, voulez-vous dire commenter listen
sur votre serveur? Sans cela, votre serveur n'autorisera aucune connexion entrante:
// http.listen(3000, function(){
// console.log('listening on *:3000');
// });
Enfin, au lieu de vous lier à un port codé en dur (3000), vous devez lier une variable d’environnement avec une valeur par défaut:
http.listen(process.env.PORT || 3000, function(){
console.log('listening on', http.address().port);
});
J'ai rencontré la même erreur, mais l'inclusion de "start":"node app.js"
dans le fichier package.json tend à résoudre le problème. J'espère que cela aide tous ceux qui rencontrent la même erreur.
Remarque: app.js doit être votre propre fichier de serveur principal.
Après avoir vérifié heroku logs
, j'ai pu découvrir que ma dépendance à bcrypt était définie correctement dans package.json. Je vous recommanderais:
npm install
git Push heroku
J'ai également rencontré cette erreur après ne pas utiliser l'application Node pendant plusieurs semaines. La raison semblait en être que non seulement l'application s'était endormie, mais également la base de données et sa connexion. J'utilise une instance MongoDB gratuite hébergée par MongoLab.
J'ai résolu ce problème en exécutant ma copie locale de l'application, ce qui a réveillé MongoLab. Puis, après quelques minutes, mon application hébergée sur Heroku a recommencé à fonctionner.
Vérifiez toutes vos dépendances. Vous pouvez le confirmer en recoupant votre package.json ou plutôt actualiser l'installation de toutes les dépendances de votre package.json