window.WebSocket - 窗口未定义

时间:2016-03-17 19:42:01

标签: javascript node.js

我有点不在我的舒适区,所以寻找一些指导。我正在尝试访问api以显示实时指标,使用phonic-elixir(https://www.npmjs.com/package/phoenix-elixir) - 我只是试图让它先运行,所以加载了他们的示例代码并连接到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

只是一些建议指向我正确的方向将是太棒了。窗口没有定义,因为它需要一个dom?我是否需要服务器来运行它?

谢谢:)

2 个答案:

答案 0 :(得分:1)

我刚刚将客户端移植到与node.JS兼容。

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

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

要安装它,请运行:

npm install --save phoenix-channels

与原始API相同的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) })

答案 1 :(得分:0)

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