开发者问题收集

window.WebSocket - 窗口未定义

2016-03-17
1186

我有点不适应,所以寻求一些指导。我正在尝试使用 phonic-elixir ( https://www.npmjs.com/package/phoenix-elixir ) 访问 api 来显示实时指标 - 只是想先让它运行起来,所以我加载了他们的示例代码并连接到 api(如果术语全错了,请原谅我,我是新手!)

这是我的代码:

import {Socket} from 'phoenix-elixir';

let socket = new Socket('ws://API_URL_HERE', {params: {'auth-token': 'AUTH_TOKEN'}})

socket.connect()

let channel = socket.channel('updates:new', {})
channel.join()
  .receive('ok', resp => { console.log('Joined successfully', resp) })
  .receive('error', resp => { console.log('Unable to join', resp) })

channel.on('update', payload => {
  console.log('Received: ' + payload);
  console.log(payload);
})

export default socket

当我运行 babel index.js | node 时,我收到错误: this.transport = opts.transport || window.WebSocket || LongPoll;ReferenceError: window is not defined

只要能给我一些建议,指明正确的方向就太好了。window 未定义是因为它需要一个 dom 吗?我需要一个服务器来运行它吗?

谢谢 :)

2个回答

我刚刚移植了客户端以兼容 node.JS。

这是链接 https://github.com/mcampa/phoenix-channels

与原始客户端的区别在于,它不使用长轮询,您需要传递绝对 url 而不是相对 url。

要安装它,请运行:

npm install --save phoenix-channels

与原始 API 相同:

const { Socket } = require('phoenix-channels')

let socket = new Socket("ws://example.com/socket")

socket.connect()

// Now that you are connected, you can join channels with a topic:
let channel = socket.channel("room:lobby", {})
channel.join()
  .receive("ok", resp => { console.log("Joined successfully", resp) })
  .receive("error", resp => { console.log("Unable to join", resp) })
Mario Campa
2017-05-30

phoenix-elixir 是客户端库,应该在浏览器中使用,而不是在节点环境中使用。您应该使用代码创建 html 页面并在浏览器中打开它进行测试。

Stubb0rn
2016-03-17