Meteor.isServer
在窗口工作正常,但現在很長一段時間就已經recommended,與其使用Meteor.isServer
和Meteor.isClient
你應該代碼分成/client
和/server
目錄。
隨着新版本的流星,當您運行meteor create testApp
這下面是創建:
在/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()')
});
下面是從服務器和瀏覽器所生成的日誌:
在客戶端和服務器的console.log
線不Meteor.startup
塊跑第一,其次是Meteor.startup
回調,因爲這些延遲直到服務器進程啓動完成或DOM準備就緒。它們的執行順序與Meteor.startup
的調用順序相同。
不在Meteor.startup
塊中的調用在其文件加載後執行,在Default file load order之後。