2016-11-22 68 views
0

兩週前我開始學習coursera的課程,並且有一個例子說明如何在console.log和Mongo上使用Meteor.isClient方法。但它沒有奏效。我的Windows的命令行即使重啓後,如果我嘗試在瀏覽器的控制檯類型不顯示在輸出任何東西console.log(Images.find().count())它輸出0在窗口中忽略流星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.isServerMeteor.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之後。