Javascript Meteor对象在控制台中可用,但抛出';无法读取未定义的findOne属性

Javascript Meteor对象在控制台中可用,但抛出';无法读取未定义的findOne属性,javascript,meteor,publish-subscribe,Javascript,Meteor,Publish Subscribe,我是Meteor的新手,我已经在这个问题上纠缠了好几个小时了 我已经在imports/lib/sessions.js的“sessions.js”文件中创建了一个集合 import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; Sessions = new Mongo.Collection('sessions'); 我使用浏览器控制台在数据库中创建了一些文档。然后,我想使用模板帮助器返回一个文档:

我是Meteor的新手,我已经在这个问题上纠缠了好几个小时了

我已经在imports/lib/sessions.js的“sessions.js”文件中创建了一个集合

import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';

Sessions = new Mongo.Collection('sessions');
我使用浏览器控制台在数据库中创建了一些文档。然后,我想使用模板帮助器返回一个文档:

import { Template } from 'meteor/templating';
import { Sessions } from '../../../../imports/lib/sessions.js';

Template.CarCamping.helpers({
    test: function() {
        return Sessions.findOne({name: 'David'});
    }
});
这会引发以下错误:

debug.js:41Exception in template helper: TypeError: Cannot read property 'findOne' of undefined
    at Object.test (http://localhost:3000/app/app.js?hash=e301d24dd47ccd4c73ae01a856896ad67acaaca0:77:32)
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:2994:16
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1653:16
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3046:66
    at Function.Template._withTemplateInstanceFunc (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3687:12)
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3045:27
    at Spacebars.call (http://localhost:3000/packages/spacebars.js?hash=65db8b6a8e3fca189b416de702967b1cb83d57d5:172:18)
    at Spacebars.mustacheImpl (http://localhost:3000/packages/spacebars.js?hash=65db8b6a8e3fca189b416de702967b1cb83d57d5:106:25)
    at Object.Spacebars.mustache (http://localhost:3000/packages/spacebars.js?hash=65db8b6a8e3fca189b416de702967b1cb83d57d5:110:39)
    at ._render (http://localhost:3000/app/app.js?hash=e301d24dd47ccd4c73ae01a856896ad67acaaca0:30:22)
我已经尝试过的:

  • 确保自动发布处于启用状态,以便在订阅或发布数据时不会出现问题
  • 确保不仅在服务器上创建集合。如果我理解正确,客户端和服务器都可以访问路径“imports/lib/sessions.js”
  • html包含具有模板名称的模板标记
问题是:当我使用Sessions.findOne({name:'David'})从控制台查询数据库时它确实给了我预期的结果。但从代码本身来看,它不起作用


非常感谢您的帮助!提前感谢。

您没有从
导入/lib/Sessions.js
导出
会话,因此当您转到
导入
时,
会话
不会被定义。试试这个:

从'meteor/Mongo'导入{Mongo};
export const Sessions=new Mongo.Collection('Sessions');

您可以在
Todos
集合中看到类似的模式。

谢谢您的回答。这确实解决了模板中不打印数据的问题。但是当我向return语句中添加一个属性时,例如:“return Sessions.findOne({name:'David'}).name”我会收到一个错误,错误是:无法读取未定义的属性“name”。该名称确实显示在视图中,但控制台不允许我访问集合及其对象?因此听起来原始问题已经解决。你的后续问题是相关的,但我不能在评论中对它们进行彻底的处理。这里有一些快速的想法:(1)可能有几个原因,但听起来你需要一个警卫-看。(2) 集合在原始代码中是一个全局变量,现在是一个导出变量。有关如何处理此问题的想法,请参阅。