我将以下代码作为服务器:
var http = require('http'),
cors = require('cors'),
connect = require('connect'),
WebSocketServer = require('ws');
var DataController = function() {
this.PORT = 8090;
this.startWS();
this.startServer();
}
DataController.prototype = {
// code to start server...
getMessage: function(_message) {
var that = this,
message = JSON.parse(_message),
msgName = message.name;
console.log('new message ' + msgName);
switch(msgName){
case 'start':
// here is some code to perform actions
}
正如您在此处所见,我有getMessage
函数可以触发某些事件并调用它我需要发送消息start
。这很容易,对吗?对我来说,它并不令人兴奋。
这就是我尝试在我的React组件中执行此.send()
方法的方法(我的React应用程序当然在不同的端口上运行):
import React, { Component } from 'react';
class App extends Component {
componentDidMount() {
const socket = new WebSocket('ws://localhost:8090');
socket.onopen = function() {
socket.send(JSON.stringify({message: "start"}));
}
}
render() {
return (
<div className="container">App</div>
)
}
}
export default App;
我在这里尝试完成的任务 - 我只需要发送一个单词 - start
来实际开始从服务器接收数据,但我无法理解为什么。请参阅我的服务器代码中的console.log()
语句,该语句在发送消息时记录消息start
。所以它实际上应该记录start
,但它会记录undefined
。
到目前为止我尝试了什么:
1.仅发送start
2.定义一个这样的对象:
const data = {
message: "start"
}
然后将data
传递给.send()
函数
3.仅定义一个这样的变量:const data = "start"
上面没有任何作品!一切都在服务器端返回undefined
。我刚刚开始使用websockets,并且无法找到让它工作的方法。我主要提到Mozilla并且它也没有用。那么在这种情况下我究竟做错了什么呢?在此先感谢,我感谢任何帮助!
答案 0 :(得分:2)
在我看来,您在.send()中发送的对象不包含名称密钥,因此当您将msgName定义为message.name时,它将评估为undefined,因为该对象不存在于对象中。
您可以通过更改发送的对象来轻松更改此设置,以便按键&#34;开始&#34;被称为名字。