Das Problem ist, dass, wenn ich versuche, "this.io.emit" -Ereignis zu feuern, ein TypeError auftritt. Es gibt nur während ich schreibe diese Anweisung "this.io.emit" in "socket.on" Block sonst, wenn ich es außerhalb dieses Blocks schreibe es erzeugt keinen Fehler.TypeError: Kann die Eigenschaft 'emit' von undefined nicht lesen
Dies ist die wichtigste server.js Datei mit den anderen Bibliotheken zu nennen:
const express = require('express'),
http = require('http'),
socketio = require('socket.io');
class App{
constructor()
{
this.port = process.env.PORT || 81;
this.host = `localhost`;
this.app = express();
this.http = http.Server(this.app);
this.socket = socketio(this.http);
}
appConfig(){
new config(this.app);
}
appRoutes(){
new routes(this.app,this.socket).routesDefault();
}
appDefault(){
this.appConfig();
this.appRoutes();
this.http.listen(this.port,this.host,()=> {
console.log(`Listening`);
});
}}
mein Server-Side-Code ist:
'use strict';
class Routes {
constructor(app,socket) {
this.app = app;
this.io = socket;
this.users=[];
}
routesTemplate()
{
this.app.get('/',function(req,res){
res.render('index');
});
}
socketEvents()
{
this.io.on('connection',(socket) => {
socket.on('send message',function(data)
{
this.io.emit('new message',data);//here the error lies.
});
});
}
routesDefault()
{
this.routesTemplate();
this.socketEvents();
}}
module.exports = Routes;
Ich habe versucht, auch Zugriff auf „this.users.The Länge "innerhalb socket.on der Anweisung und es erzeugt den gleichen TypeError: kann die Länge der Eigenschaft nicht lesen. Ich habe keine Ahnung, warum es passiert. Bitte helfen Sie mir, dieses Problem zu lösen.
Client Side:
<script>
$(function($){
var socket = io.connect();
var $messageForm = $('#send-message');
var $messageBox = $('#message');
var $chat = $('#chat');
$messageForm.submit(function(e){
e.preventDefault();
socket.emit('send message',$messageBox.val());
$messageBox.val("");
});
socket.on('new message',function(data){
$chat.append(data+ "<br/>");
});
});
</script>
Aber ich habe eine andere Anwendung genau similiar, der Unterschied ist es ich AngularJS verwende, die keinen Fehler gibt, wenn die errorneous Syntax „this.io.emit“ verwenden. Das sprengt meine Meinung. Gibt es einen Unterschied in der Behandlung von "this" in beiden (javascript und angularJS)? – sagar
Können Sie diesen Code anzeigen? Es hängt davon ab, wie der Code geschrieben ist, aber das "Dies" würde genauso funktionieren, wie ich weiß. – Agalo
Ich erfuhr, dass das eigentliche Problem nur die Verwendung von Pfeilfunktion und Funktionen war, ohne diese zu binden. – sagar