我正在使用Faye和Node.js(javascript)聊天服务器,我正在努力实现“通知”#39;这样,当一个用户订阅时,服务器将向该频道发送一条消息,其中包含一个属性__messageType =' subscribe'
服务器代码看起来如此(ext字段存在且工作正常)
var chat = new Faye.NodeAdapter()... //etc
chat.addExtension({
incoming: function(message, callback) {
if (message.channel === '/meta/subscribe') {
console.log('A new user subscribed');
chat.getClient().publish(message.subscription, {
ext: message.ext,
__messageType: 'subscription'});
}
callback(message);
}
});
在我的客户端,我附上了一个传入的'扩展程序,以便人们可以轻松确定这是订阅通知,而不是实际的数据消息'
clientChat.addExtension({
incoming: function(message, callback) {
console.log('Incoming message', message);
message.getType = function() {
return message.__messageType;
};
messge.getData = function(key) {
return message.ext[key];
};
callback(message);
}
});
我正在以这种方式构建我的消息,人们可以这样做:
var sub = new Faye.Client(url).subscribe('/messages', function(message) {
if (message.getType() === 'subscribe') console.log('Someone subscribed');
if (message.getType() === 'unsubscribe') console.log('Someone left');
else console.log('Ext data: ', message.ext);
问题是我的消息是通过包含在“数据”中的ext字段来实现的。我不知道它来自哪里。我的getType和getData方法已成功添加,但它们显然不起作用,因为ext字段不再出现在顶层,而是嵌入到消息的数据字段中。
Expected: Actual:
channel: "/messages" channel: "/messages/"
ext: { variousData } data: {ext: variousData}
getData: function (key) { getData: function(key) {
getType: function () { getType: function() {
id: "4" id: "4"
有没有人知道为什么我会收到这些数据'我的消息中的字段?