2016-11-22 2 views
0

Две недели назад я начал изучать курсы по coursera, и есть пример, где показано, как использовать метод Meteor.isClient с console.log и Mongo. Но это не сработало. My Windows CLI ничего на выходе не показывают даже после перезагрузки, и если я пытаюсь в типе браузера консоли console.log(Images.find().count()) выводит 0.Meteors isServer игнорируется в окнах

Images = new Mongo.Collection("images"); 
if (Meteor.isServer){ 
    Meteor.startUp(function(){ 
    if(Images.find().count() == 0){ 
     Images.insert({ 
     img_src:'1.jpg', 
     img_alt:'Here i am !' 
     }); 
    } //end of if have no images 
    }); 
} 
console.log('startup : ' + Images.find().count()); 

ответ

2

Во-первых, ваш console.log находится за пределами вашего Meteor.isServer поэтому вполне нормально, что он отображается в клиенте.

Во-вторых, если вы хотите показать свой журнал на сервере, вам нужно либо поместить его в функцию startUp, либо в метод, который вы вызываете на клиенте.

0

Meteor.isServer отлично работает в окнах, хотя в течение долгого времени он был recommended, что вместо того, чтобы использовать Meteor.isServer и Meteor.isClient вы должны разделить код на /client и /server каталогов.

С новой версии метеора, при запуске meteor create testApp это следующее создано:

meteor directory structure

Весь код в /client будет работать только на клиенте, и весь код в /server запускается только на сервере ,

Создание/редактирование этих исходных файлов включают в себя следующие лог команд показывает, как где (клиент/сервер) и в каком порядке код выполняется:

/client/main.js

import { Template } from 'meteor/templating'; 
import { ReactiveVar } from 'meteor/reactive-var'; 

import './main.html'; 

Template.hello.onCreated(function helloOnCreated() { 
    // counter starts at 0 
    this.counter = new ReactiveVar(0); 
}); 

Template.hello.helpers({ 
    counter() { 
    return Template.instance().counter.get(); 
    }, 
}); 

Template.hello.events({ 
    'click button'(event, instance) { 
    // increment the counter when button is clicked 
    instance.counter.set(instance.counter.get() + 1); 
    }, 
}); 

Meteor.startup(() => { 
    console.log('Ping! from /client/main.js - Meteor.startup()') 
}); 

console.log('Ping! from /client/main.js - Top Level') 

/server/main.js

import { Meteor } from 'meteor/meteor'; 

Meteor.startup(() => { 
    console.log('Ping! from /server/main.js - Meteor.startup()') 
}); 

console.log('Ping! from /server/main.js - Top Level') 

/shared.js

// Runs on Both 
console.log('Hi from /shared.js - Top Level') 
Meteor.startup(() => { 
    console.log('Hi from /shared.js - Meteor.startup()') 
}); 


// Runs on Server 
if(Meteor.isClient){ 
    console.log('Hi from /shared.js - isClient') 
    Meteor.startup(() => { 
    console.log('Hi from /shared.js - isClient, Meteor.startup()') 
    }); 
} 

// Runs on Server 
if(Meteor.isServer){ 
    console.log('Hi from /shared.js - isServer') 
    Meteor.startup(() => { 
    console.log('Hi from /shared.js - isServer, Meteor.startup()') 
    }); 
} 

/lib/shared.js

console.log('Ping! from /lib/shared.js - Top Level') 

Meteor.startup(() => { 
    console.log('Ping! from /lib/shared.js - Meteor.startup()') 
}); 

Вот результирующие журналы с сервера и браузера: enter image description here

на клиенте и сервере, то console.log линии не в Meteor.startup блоков запустить первый, сопровождаемый Meteor.startup, поскольку они задерживаются до завершения процесса сервера или DOM готов. Они выполняются в том порядке, в котором были сделаны звонки Meteor.startup.

Звонки не в блоке Meteor.startup выполняются, поскольку их файлы загружаются, следуя Default file load order.

Смежные вопросы