MagicMirror² v2.13.0 is available! For more information about this release, check out this topic.

error loop



  • first of all hello 🙂

    i make my module and i have 2 looping error but she is not located on my code
    alt text

    do you have idea?
    thk for your attention


  • Module Developer

    Well, the error information are pretty clear, you just need to look at your code to come to a conclusion. Without seeing the code, we can’t know anything about why these errors occur.

    1st says there’s no element by the class name you’re searching for. Either it’s not there or you’re looking in the wrong place.

    2nd says you’re trying to append something that is not an element. You can’t append a string, for example.

    For example, that’s a string and won’t work:

    let parent = document.getElementById("parent");
    let element = "<div>lorem ipsum</div>";
    parent.appendChild(element);
    

    This will work:

    let parent = document.getElementById("parent");
    let element = document.createElement("div");
    element.innerHTML = "lorem ipsum";
    parent.appendChild(element);
    


  • @doublet
    i am not sure to understand

    if i remove my module i have one error (i correct after if i can)

    but the looping are ok

    my module

    Module.register("MMM-keylogger",{
    	curentPage: -1,
    	defaults: {
    		updateInterval:  1000,
    	},
    
    	start: function(){
            console.log(this.name + " has started...!!!!!!");
    		this.sendSocketNotification("START", this.config);
    	},
    
    	socketNotificationReceived: function(notification, payload) {
    		if(notification === "KEY_P"){
    			this.dataFile = payload;
    			this.updateDom();
            }
    	},
    
    	getDom: function(){
    		var wrapper = document.createElement("div");
    		wrapper.innerHTML = this.dataFile
    			if(this.dataFile){
    				switch(wrapper.innerHTML) {
    					case "Right":
    					this.sendNotification("PAGE_INCREMENT");
    						break;
    					case "Left" :
    					this.sendNotification("PAGE_DECREMENT");
    						break;
    					default:
    					Log.log(`key : ${wrapper.innerHTML} pressed but not assigned`);
    				}
    				this.sendSocketNotification("Clear_key")
    			}
    			return wrapper;
    	},
    
    });
    
    const NodeHelper = require("node_helper");
    const fs= require("fs");
    
    module.exports = NodeHelper.create({
    //here comes the part of the nodehelper after the 3 dots as posted above
    
    	socketNotificationReceived: function(notification, payload) {
    		if(notification === "START"){
    			this.config = payload;
    			this.readData();
        			setInterval(() => {
            			this.readData();
        			}, this.config.updateInterval);
    		}
    		if(notification === "Clear_key")
    		{
    			fs.open('Key_pres.txt', 'r+', function(err, fd) {
    				if (err) {
    				   return console.error(err);
    				}
    				fs.ftruncate(fd, function(err){
    					if (err){
    					   console.log(err);
    					}
    					console.log("supose to trucate");
    				})
    			});
    	}
    	},
    
    	readData: function(){
    		fs.readFile("Key_pres.txt", "utf8", (err, data) => {
    			if (err) throw err;
    		   this.sendSocketNotification("KEY_P", data);
       })		
    	}
    });
    

    i have no warning of no declare class or something like that on VS

    sorry but i beginner with organisation of MM

    thanks for your rapidity 🙂


  • Module Developer

    Have you assigned proper position for that module in config.js?



  • @Sean

    thanks you have suppress the first error on screen-shot
    but my modul write something on screen and i don’t want that but its can be cool for debug


  • Module Developer

    @jchenaud
    If your module doesn’t need to possess area in MagicMirror (even your module would draw something on MM), you wouldn’t use .getDom(). That function should be called by MM.core when the refreshing screen is needed. but your .getDom() will not work properly because there is no position to be drawn on.
    So you should assign a position to use .getDom().
    (Of course, there is some trick without .getDom() and position to draw something on MM)



  • @sean
    thk for explain. i will try something different to get.getDom().

    have you an idea for appendChild error ?


  • Module Developer

    @jchenaud I think that is also caused by unproper using of .getDom()
    Better practice is;

    1. use .getDom() with proper position
    2. or, not using .getDom().
    • You can start to manipulate your DOM when DOM_OBJECTS_CREATED notification from MM Core.
      like these;
    notificationReceived: function(noti, payload, sender) {
      switch(noti) {
        case 'DOM_OBJECTS_CREATED':
          this.initMyDOM()
          break
      }
    },
    initMyDOM: function() {
      var wrapper = document.createElement("div")
      wrapper.id = "myDOM"
      var container = document.body
      container.appendChild(wrapper)
      
     var timer = setInterval(()=>{
      var d = document.getElementById("myDOM")
      d.innerHTML = "This is rendered without getDom and position"
      }, 1000)
    }
    
    

    This is not tested on real device, but you can catch the idea.



  • thk i will try 🙂



  • @Sean you are awesome !!!
    my module almost work

    just one problem i need to give a position in config. i think i have miss something

    Module.register("MMM-keylogger",{
    	defaults: {
    		 updateInterval:  1500,
    	},
    
    	notificationReceived: function(noti, payload, sender) {
    		Log.log(`notif : ${noti}`);
    		switch(noti) {
    		  case 'MODULE_DOM_CREATED':
    			this.initMyDOM()
    			break
    		}
    	  },
    	  initMyDOM: function() {
    		var wrapper = document.createElement("div")
    		wrapper.id = "myDOM"
    		var container = document.body
    		container.appendChild(wrapper)
    		Log.log(`init DOM `);
    		var timer = setInterval(()=>{
    			var d = document.getElementById("myDOM")
    			d.innerHTML =  this.dataFile
    		Log.log(`key : ${d.innerHTML} , ${this.dataFile} `);
    			if(d.innerHTML){
    				switch(d.innerHTML) {
    					case "Right":
    					this.sendNotification("PAGE_INCREMENT");
    						break;
    					case "Left" :
    					this.sendNotification("PAGE_DECREMENT");
    						break;
    					default:
    					Log.log(`key : ${d.innerHTML} pressed but not assigned`);
    				}
    				this.sendSocketNotification("Clear_key")
    			}
    			
    			}, 1500)
    	},
    
    	start: function(){
            console.log(this.name + " has started...!!!!!!");
    		this.sendSocketNotification("START", this.config);
    	},
    
    	socketNotificationReceived: function(notification, payload) {
    		if(notification === "KEY_P"){
    			this.dataFile = payload;
    			// this.updateDom();
            }
    	},
    

    if i don’t give position on config its don’t work ! if i have understand what you have say. this is suppose to work

    other question : one of my other module have subitly stop to work and make same error but in this module in need position and update with Miror display. so my question is : this is possible this modification have impact on other module ?


Log in to reply