nodejs mqttjs 缺少协议错误

dot*_*uad 2 node.js mqtt

我正在尝试在 nodejs 中获取 mqttjs 的工作示例。我在尝试使用node main.jsWindows 10 cmd 提示符中的命令执行我的 main.js 文件时收到此错误:

错误:

C:\Users\Rich\Documents\Code\nodejs\onoff\node_modules\mqtt\lib\connect\index.js:64
      throw new Error('Missing protocol')
      ^

Error: Missing protocol
    at Object.connect (C:\Users\Rich\Documents\Code\nodejs\onoff\node_modules\mqtt\lib\connect\index.js:64:13)
    at Object.<anonymous> (C:\Users\Rich\Documents\Code\nodejs\onoff\main.js:2:20)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:188:16)
    at bootstrap_node.js:609:3
Run Code Online (Sandbox Code Playgroud)

代码:

var mqtt = require('mqtt');
var client  = mqtt.connect('192.168.0.22');

client.on('connect', function () {
  client.subscribe('mydevice')
  client.publish('presence', 'Hello mqtt')
})

client.on('message', function (topic, message) {
  // message is Buffer
  console.log(message.toString())
  client.end()
})
Run Code Online (Sandbox Code Playgroud)

har*_*llb 9

这是因为(如错误所述)您错过了需要传递给connect()方法的 URI 中的协议。

您已经传递了一个原始 IP 地址,但它需要是一个 URI,包括协议和主机。

var client  = mqtt.connect('mqtt://192.168.0.22')
Run Code Online (Sandbox Code Playgroud)

这在 README.md 中的示例中显示,该文件包含在 github 和npm上的包中。

它也在 API 文档中描述:

mqtt.connect([url], 选项)

连接到由给定 url 和选项指定的代理并返回一个客户端。

URL 可以采用以下协议:“mqtt”、“mqtts”、“tcp”、“tls”、“ws”、“wss”。URL 也可以是 URL.parse() 返回的对象,在这种情况下,这两个对象会合并,即您可以传递带有 URL 和连接选项的单个对象