如何在 'published' 回调中访问客户端对象?
How to access client object in 'published' callback?
我正在使用 Mosca 作为带有 mosquito 后端的嵌入式 MQTT 代理。我主要将 Mosca 用作身份验证机制,它可以读取 jwt 令牌并从中提取一些值。我已经创建了自己的授权者来读取 mqtt 密码字段中的 JWT 令牌并 decode/verify 它。解码后,我将解码字段添加到客户端对象,如下所示
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);
});
不知何故,上面的代码没有按预期工作。我收到以下错误:
TypeError: 无法读取未定义的 属性 'decoded_token'
而如果我使用 console.log(client)
而不是 console.log(client.decoded_token)
,它会起作用,我可以在客户端对象中看到 decoded_token
值。
我有两个问题。
- 为什么上面的代码不起作用?
- 当我在客户端对象中存储一个值时,该值是传递给客户端(传感器),它可以随后续请求一起发送,还是仅存储在本地内存中?
我是 MQTT 的新手,所以如果问题太幼稚,请原谅:)
- 如果您可以在客户端对象中获取 decoded_token 变量。那么我们可以
通过
访问它
client.decoded_token
如果您使用 vs code 或 Webstrom 进行开发,您可以使用内置调试器来调试和打印客户端对象。
- 您不能将值传递到客户端对象以供下一次调用。
我正在使用 Mosca 作为带有 mosquito 后端的嵌入式 MQTT 代理。我主要将 Mosca 用作身份验证机制,它可以读取 jwt 令牌并从中提取一些值。我已经创建了自己的授权者来读取 mqtt 密码字段中的 JWT 令牌并 decode/verify 它。解码后,我将解码字段添加到客户端对象,如下所示
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);
});
不知何故,上面的代码没有按预期工作。我收到以下错误:
TypeError: 无法读取未定义的 属性 'decoded_token'
而如果我使用 console.log(client)
而不是 console.log(client.decoded_token)
,它会起作用,我可以在客户端对象中看到 decoded_token
值。
我有两个问题。
- 为什么上面的代码不起作用?
- 当我在客户端对象中存储一个值时,该值是传递给客户端(传感器),它可以随后续请求一起发送,还是仅存储在本地内存中?
我是 MQTT 的新手,所以如果问题太幼稚,请原谅:)
- 如果您可以在客户端对象中获取 decoded_token 变量。那么我们可以 通过 访问它
client.decoded_token
如果您使用 vs code 或 Webstrom 进行开发,您可以使用内置调试器来调试和打印客户端对象。
- 您不能将值传递到客户端对象以供下一次调用。