2015-06-09 3 views
0

Я пытаюсь разработать приложение чата с помощью Express JS (шаблон нефрита) и socket.io .Йтесь мой app.jsЭкспресс приложение чат расслоения плотного: 404 ошибки socket.io.js файл

var express = require('express'); 
var path = require('path'); 
var http = require('http'); 
var io = require('socket.io')(http); 
var app = express(); 
//start chat with socket io 
io.sockets.on('connection',function(socket){ 
    console.log("connection"); 
    socket.on('send message',function(data,callback){ 
    var msg=data.trim(); 
    if(msg==null){ 
     callback("enter a messsage"); 
    }else{ 
     console.log("chat message"+msg); 
     io.sockets.emit('new message',{msg:msg}); 
    } 
    }); 
}); 
//end socket 

Вот мой chat.js файл на стороне клиента

$(document).ready(function(){ 
    var socket=io.connect('http://localhost:3000'); 
    var $message=$('#message'); 
    var $messageForm=$('#send-message'); 
    //opens a connection and send to sever 
    $messageForm.submit(function(e){ 
      e.preventDefault(); 
      socket.emit('send message',$message.val(),function(data){ 
       console.log("data"+data); 
      }); 
      $message.val(''); 
      }); 
    //read the chat messages from users 
    socket.on('new message',function(data){ 
     console.log('data.msg'); 
    }); 
}); 

chat.jade файл

<form id="send-message"> 
<input type="text" id="message"> 
<input type="submit" value="submit"/> 
</form> 
<script src="http://localhost/api/jquery.min.js"></script> 
<script src="http://localhost:3000/socket.io/socket.io.js"></script> 

Я буду получать ошибку 404 на этот файл http://localhost:3000/socket.io/socket.io.js. Также получите Uncaught ReferenceError: io is not defined в скрипте chat.js. Я думаю, это из-за отсутствия файла socket.io.js.

ответ

3

У вас есть пара вопросов.
Порции статические файлы в шаблонах нефрита вы должны использовать что-то вроде этого:

link(rel='text/javascript', href='/js/socket.io.js')  

Эти файлы, как правило, содержится в public каталог в экспресс-приложение. Тогда в вашем app.js вы должны иметь что-то вроде:

app.use(express.static('public')); 

Его объясняется здесь на экспресс сайте - http://expressjs.com/starter/static-files.html

В других

Uncaught ReferenceError: io is not defined 

$(document).ready(function(){ 
    var socket=io.connect('http://localhost:3000'); 

Это происходит потому, что у вас нету определенной io на вашем клиент. Вы вызываете connect на что-то под названием io, но havent объявлен/определен io в любом месте.

Также Вы не создали сервер сокетов на стороне вашего приложения. Вы должны делать что-то вдоль линий:

var express = require('express'); 
var app = express(); 
var server = require('http').createServer(app); 
var io = require('socket.io')(server); 
var port = process.env.PORT || 3000; 

server.listen(port, function() { 
    console.log('Server listening at port %d', port); 
}); 
io.on('connection', function (socket) { 
    // when the client emits 'new message', this listens and executes 
    socket.on('new message', function (data) { 
     // we tell the client to execute 'new message' 
     socket.broadcast.emit('new message', { 
     }); 
    }); 

Пример
Socket.io есть приложение, пример чата на GitHub, что вы должны использовать в качестве ссылки.
Ваш chat.js бы эквивалент их public/main.js
Ваш chat.jade эквивалентно их public/index.html
и ваш app.js соответствует их index.js

+0

позвольте мне попробовать, что –

+0

я думаю, что моя проблема с 'io.connect'. –

+0

У меня есть файл с прикрепленным файлом socket.io в моем чате.jade.Now ошибка 404 решена, но 'io reference error' по-прежнему сохраняется –

Смежные вопросы