得到子域和查询数据库的结果 - 流星

时间:2015-08-07 19:32:43

标签: javascript mysql node.js meteor javascript-events

我现在对Meteor很新。

我想

  1. 获取网址
  2. 的子域名
  3. 检查客户端是否与子域匹配
  4. 如果客户端存在,则查询数据库并从数据库中获取一些结果(比如客户端设置)。
  5. 我确信如果我们使用MongoDB,这将是一块蛋糕,但是,我们必须移动一个具有MySQL后端的现有应用程序(基于PHP构建)。

    我为meteor找到了一个包Bootstrap,我已将它添加到项目中。

    这是迄今为止编写的源代码:

    if(!Session.get('client_details')) {
        var hostnameArray = document.location.hostname.split('.');
    
        if(hostnameArray[1] === "localhost" && hostnameArray[2] === "local") {
            var subdomain = hostnameArray[0];
        }
    
        if(subdomain) {
            currentClientDetails = new MysqlSubscription('getClientDetailsFromUrl', subdomain).reactive();
            Tracker.autorun(function() {
                if(currentClientDetails.ready()) {
                    if(currentClientDetails.length > 0) {
                        var clientDetails = currentClientDetails[0];
    
                        Session.setPersistent('client_details', clientDetails);
                        var clientId = clientDetails.id;
    
                        if(!Session.get('client_settings')) {
                            clientSettings = new MysqlSubscription('clientSettings', clientId).reactive();
                            Tracker.autorun(function() {
                                if(clientSettings.ready()) {
                                    if(clientSettings.length > 0)
                                        Session.setPersistent('client_settings', clientSettings[0]);
                                    else
                                        Session.setPersistent('client_settings', {});
                                }
                            });
                        }
                    }
                }
            });
        }
    }
    

    session.setPersistent来自numtel:mysql以在客户端存储会话 这是发表声明:

    Meteor.publish("getClientDetailsFromUrl", function(url) {
        if(typeof url === undefined) {
            return;
        }
    
        var clientDetails = Meteor.readLiveDb.select(
            'select * from clients where client_url = "'+ url +'"',
            [{table: 'clients'}]
        );
    
        return clientDetails;
    });
    
    
    Meteor.publish("clientSettings", function(clientId) {
        if(typeof clientId === undefined) {
            throw new error('ClientId cannot be null');
            return;
        }
    
        var clientSettings = Meteor.readLiveDb.select(
            'select * from client_settings where client_id = ' + clientId, [{
                table: 'client_settings'
            }]);
    
        return clientSettings;
    });
    

    ,数据库启动为

    Meteor.readLiveDb = new LiveMysql(<MySQL Settings like host, user, passwords, etc>);
    
      

    问题

    我成功地将client_details加入会话,然而,无法将client_settings加入会话。最终出现错误:

    Exception from Tracker recompute function:
    Error: Subscription failed!
        at Array.MysqlSubscription (MysqlSubscription.js:40)
        at app.js?6d4a99f53112f9f7d8eb52934c5886a2b7693aae:28
        at Tracker.Computation._compute (tracker.js:294)
        at Tracker.Computation._recompute (tracker.js:313)
        at Object.Tracker._runFlush (tracker.js:452)
        at onGlobalMessage (setimmediate.js:102)
    

    我知道代码很乱,可以好多了,欢迎提出建议

0 个答案:

没有答案