我目前正在尝试让node-hue-api npm库在我的MeteorJS项目中运行。我已经完成了网桥搜索和连接工作(虽然它完全不遵循Meteor方式)。然而,我仍然坚持寻找灯光。
要获得经过身份验证的客户端,我在桥接组件方法中定义了以下代码:
import { Settings } from '../../settings/settings';
import { HueApi } from 'node-hue-api';
Meteor.methods({
'philipsHue.bridges.client'() {
const hueSettings = Settings.findOne({ type: 'philips-hue' });
return new HueApi(hueSettings.hostname, hueSettings.username);
}
});
在我的光方法(不同文件)中,我现在调用此方法来获取经过身份验证的客户端:
Meteor.methods({
'lights.scan'() {
var hueClient = new HueApi(Meteor.call('philipsHue.bridges.client'));
hueClient.lights().then((val) => {
val.lights.forEach(function (hueLight) {
let dbLight = Lights.findOne({ id: hueLight.id });
if (dbLight) {
// we already have a db copy of this light, check for changes
}
else {
// we need a new local copy for this light
dbLight.insert(hueLight);
}
})
});
}
});
返回的HueApi对象具有正确的变量,但它已被剥离所有方法 - 导致我未定义的方法错误。只有通过Meteor.call()
传递的对象才会发生这种情况,如果我在同一个函数中创建方法,那么方法就在那里。
这是我遇到问题的图书馆的类:GitHub
导致此方法剥离行为的原因是什么?我该如何解决?
答案 0 :(得分:1)
从上面的评论发表...
流星方法适用于DDP,我几乎可以肯定他们只发送JSON而不是完整的对象"用方法等。您可以使用Chrome的开发工具查看Meteor通过方法调用等发送的内容,然后转到“网络”选项卡,然后在WS(Web套接字)上进行过滤。正如您必须转换Collection查询结果的结果一样,您可能必须执行类似的操作以使原始JSON转换回所需的完整对象。请记住,JavaScript并没有真正处理对象"而是使用原型来模拟它们。