在Windows中忽略Meteors isServer

时间:2016-11-22 19:01:09

标签: mongodb meteor

两周前,我开始学习http://wiki.pentaho.com/display/ServerDoc2x/Starting+BI+Server+as+a+windows+service上的课程,并举例说明如何将Meteor.isClient方法与console.log和Mongo一起使用。但它没有用。即使在重新启动后,我的Windows CLI也不会在输出中显示任何内容,如果我在浏览器控制台中尝试输入console.log(Images.find().count()),则输出0。

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 个答案:

答案 0 :(得分:2)

首先,您的console.log不在您的Meteor.isServer之内,所以在客户端显示它是很正常的。

其次,如果要在服务器中显示日志,则必须将其放在startUp函数或您在客户端中调用的方法中。

答案 1 :(得分:0)

Meteor.isServer在Windows中工作正常,但很长一段时间recommended而不是使用Meteor.isServerMeteor.isClient,您应该将代码拆分为{{} 1}}和/client目录。

对于新版本的meteor,当您运行/server时,会创建以下内容:

meteor directory structure

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

以下是来自服务器和浏览器的结果日志: enter image description here

在客户端和服务器上,不在console.log('Ping! from /lib/shared.js - Top Level') Meteor.startup(() => { console.log('Ping! from /lib/shared.js - Meteor.startup()') }); 块中的console.log行首先运行,然后是Meteor.startup回调,因为这些行被延迟直到服务器进程完成启动,或DOM准备好了。它们的执行顺序与Meteor.startup的调用顺序相同。

不在Meteor.startup块中的调用在Default file load order之后加载文件时执行。