javascript - 如何在 'published'回调中访问客户端对象?

标签 javascript node.js mqtt iot mosca

我使用 Mosca 作为具有蚊子后端的嵌入式 MQTT 代理。我主要使用 Mosca 作为一种身份验证机制,它可以读取 jwt token 并从中提取一些值。我创建了自己的授权者来读取 mqtt 密码字段中的 JWT token 并对其进行解码/验证。解码后,我将解码后的字段添加到客户端对象,如下所示

authenticate(client, username, password, next) {
    try {
        const decoded_token = jwt.verify(password.toString(), process.env.SECRET_KEY_BASE);
        client.decoded_token = decoded_token;
        next(null, true);
    } catch(error) {
        console.log('name: %s, error: %s', error.name, error.message);
        console.log('unauthorized!');
        next(null, false);
    }
}

我想访问 published 回调中的 decoded_token 值,如下所示

broker.on('published', (packet, client) => {
    console.log(client.decoded_token);
    console.log('Published', packet.topic, packet.payload);

});

不知何故,上面的代码没有按预期工作。我收到以下错误:

类型错误:无法读取未定义的属性“decoded_token”

如果我使用 console.log(client) 而不是 console.log(client.decoded_token),它就可以工作,并且我可以看到 decoded_token 客户端对象中的值。

我有两个问题。

  1. 为什么上面的代码不起作用?
  2. 当我在客户端对象中存储值时,该值是传递给客户端(传感器)并可以通过后续请求发送还是仅存储在本地内存中?

我是 MQTT 新手,所以如果问题太天真请原谅:)

最佳答案

  1. 如果您可以在客户端对象中获取decoded_token变量。那么我们可以 通过访问它

client.decoded_token

如果您使用 VS Code 或 Webstrom 进行开发,您可以使用内置调试器来调试和打印客户端对象。

  • 您无法将值传递到客户端对象以供下次调用。
  • 关于javascript - 如何在 'published'回调中访问客户端对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55567491/

    相关文章:

    HTML 页面中 JavaScript 的执行顺序

    javascript - JSON.stringify 返回 {} 即使有替换器

    python - Django和Node –如何运作?

    amazon-web-services - "certificate verify failed"桥接 AWS IoT 与本地 Mosquitto MQTT 时

    c - MQTT 问题 : Broker closing connection as i send connect packet

    javascript - 正则表达式中的 `\\s`是什么意思

    javascript - Jquery 为什么toggleClass 在这里不起作用?

    javascript - http-proxy-middleware - 访问静态文件

    node.js - 在 redis 中存储 node.js 聊天的消息。如何?

    google-cloud-functions - 谷歌物联网核心: how do I know which device the message is coming from?