如何在反应本机WebSocket连接中传递查询参数

时间:2017-09-20 20:09:40

标签: react-native websocket expo

我有一个可以建立WebSocket连接的服务器。当设备建立WebSocket连接时(当应用程序启动/启动屏幕时),服务器会在URL中查找query parameter,其中包含用户的身份验证令牌,如果令牌正确,则连接被批准,否则连接被拒绝。

这是代码在本机客户端反应的方式:

const socket = new WebSocket(`ws://${website}/?token=${value}`);
socket.onmessage = (messageEvent) => {
    console.log('>>> socket on message:', messageEvent.data);
};
socket.onopen = function () {
    socket.send("hello world connection");
};
socket.onclose = () => {
    console.log('Socket disconnected');
};

这在我的iOS模拟器中工作正常,iOS模拟器与我的服务器有一个WebSocket连接。但是,我有一个Android手机(通过LAN测试),当我打开应用程序时,我收到一个错误说:

  

无法将ws://192.xxx.xx.xx/token=aut sfiseft2sefsefs .....设置为默认原始标题

但是,如果我从URL中删除查询参数

const socket = new WebSocket(`ws://${website}`);

这样可以正常工作,但由于我无法在查询参数中传递令牌,因此我从服务器收到错误。

如何将查询参数传递给android中的WebSocket连接?我做错了什么?

1 个答案:

答案 0 :(得分:1)

我有同样的问题。在将url传递给WebSocket之前使用encodeURI()解决问题。

const uri = encodeURI(`ws://${website}/?token=${value}`);    
const socket = new WebSocket(uri);

这适合我。