2016-08-30 3 views
0

Я пытаюсь создать приложение чата с помощью Ionic2 (Angular2). У меня есть Java-сервер и Клиент Ionic 2.ОРИГИНАЛЬНОЕ ИСКЛЮЧЕНИЕ: ReferenceError: io не определено

Я получаю следующее сообщение об ошибке:

ORIGINAL EXCEPTION: ReferenceError: io is not defined

Любые предложения, пожалуйста?

Client

import { Component, NgZone } from '@angular/core'; 
import { Http } from "@angular/http"; 
declare var io; 
//require ('io'); 

@Component({ 
    templateUrl: 'build/pages/chat/chat.html', 
}) 

export class ChatPage { 

    private socketHost: string = "http://localhost:3700"; 
    private messages: string[] = []; 
    private zone: NgZone = null; 
    private chatBox: string = null; 
    private socket: any = null; 

    constructor(http: Http) { 
    this.messages = []; 
    this.zone = new NgZone({ enableLongStackTrace: false }); 
    //let url = this.socketHost + "/fetch"; 
    let url = this.socketHost; 
    http.get(url).subscribe((success) => { 
     var data = success.json(); 
     for (var i = 0; i < data.length; i++) { 
     this.messages.push(data[i].message); 
     } 
    }, (error) => { 
     console.log(JSON.stringify(error)); 
    }); 
    this.chatBox = ""; 


    this.socket = io(this.socketHost); 
    this.socket.on("chat_message", (msg) => { 
     this.zone.run(() => { 
     this.messages.push(msg); 
     }); 
    }); 
    } 

    send(message) { 
    if (message && message != "") { 
     this.socket.emit("chat_message", message); 
    } 
    this.chatBox = ""; 
    } 
} 

HTML

<ion-navbar *navbar> 
    <ion-title> 
     Chat 
    </ion-title> 
</ion-navbar> 

<ion-content class="home"> 
    <ion-list> 
     <ion-item *ngFor="let message of messages">{{message}}</ion-item> 
    </ion-list> 
</ion-content> 

<ion-footer-bar> 
    <ion-input> 
     <input type="text" [(ngModel)]="chatBox" placeholder="Message..." /> 
     <button (click)="send(chatBox)">Send</button> 
    </ion-input> 
</ion-footer-bar> 

index.html

<script src="/socket.io/socket.io.js"></script> 

Сервер

import com.corundumstudio.socketio.AckRequest; 
import com.corundumstudio.socketio.Configuration; 
import com.corundumstudio.socketio.SocketIOClient; 
import com.corundumstudio.socketio.SocketIOServer; 
import com.corundumstudio.socketio.listener.ConnectListener; 
import com.corundumstudio.socketio.listener.DataListener; 
import com.corundumstudio.socketio.listener.DisconnectListener; 

public class Server { 

    public static void main(String[] args) { 
     Configuration config = new Configuration(); 
     config.setHostname("localhost"); 
     config.setPort(3700); 
     final SocketIOServer server = new SocketIOServer(config); 
     server.addConnectListener(new ConnectListener() { 
      @Override 
      public void onConnect(SocketIOClient client) { 
       System.out.println("onConnected"); 
       client.sendEvent("message", new Message("", "Welcome to the chat!")); 
      } 
     }); 
     server.addDisconnectListener(new DisconnectListener() { 
      @Override 
      public void onDisconnect(SocketIOClient client) { 
       System.out.println("onDisconnected"); 
      } 
     }); 
     server.addEventListener("send", Message.class, new DataListener<Message>() { 

      @Override 
      public void onData(SocketIOClient client, Message data, AckRequest ackSender) throws Exception { 
       System.out.println("onSend: " + data.toString()); 
       server.getBroadcastOperations().sendEvent("message", data); 
      } 
     }); 
     System.out.println("Starting server..."); 
     server.start(); 
     System.out.println("Server started"); 

    } 
} 

UPDATE

добавить следующее index.html, и я не получаю никаких ошибок больше:

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>

Но это как раз висит. И в Firebug, я могу видеть, что следующий запрос просто висит:

GET http://localhost:3700/

печатается в консоли сервера следующие:

onConnected

Когда сервер не работает в следующие времена запроса, как ожидается, но когда сервер работает, запрос действительно возвращается, но с null ответ:

GET http://localhost:3700/socket.io/?EIO=3&transport=...LRQn9sx&sid=53081e79-81f3-4fc0-8fb7-17c8673938ca   
200 OK 
     27ms 

Так что наводит на мысль, что мой код сервера или Communica Я думаю, что ошибка между клиентом и сервером неверна.

Любые идеи?

ответ

0

В вашем Угловом приложении вы слушаете и излучаете chat_message.

На вашем сервере Java вы слушаете send и испускаете message.

Это не сложить, не так ли?

+0

спасибо. Я изучаю это сейчас ... Если я изменю «отправить» и «сообщение» на сервере «chat_message», чтобы соответствовать клиенту, теперь я получаю следующее в журналах сервера: «Запуск сервера ... Начал работу сервер onConnected onDisconnected onConnected' Но приложение все еще зависает с ответом «null» с сервера. – Richard

+0

Хм, не знаю ничего о том, что грустно - это была единственная очевидная ошибка, которую я мог видеть. Глядя на [Демо-файлы] (https://github.com/mrniko/netty-socketio-demo/blob/master/server/src/main/java/com/corundumstudio/socketio/demo/ChatLauncher.java) ваш код Java выглядит правильно. – rinukkusu

+0

Сейчас, похоже, частично работает. Спасибо за помощь. – Richard

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