流星对象在控制台中可用,但抛出“无法读取属性 findOne of undefined”
Posted
技术标签:
【中文标题】流星对象在控制台中可用,但抛出“无法读取属性 findOne of undefined”【英文标题】:Meteor object available in Console, but throws 'cannot read property findOne of undefined 【发布时间】:2016-09-19 17:10:29 【问题描述】:我是 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');' 从控制台查询数据库时它确实给了我预期的结果。但从代码本身来看,它不起作用。
非常感谢您的帮助!提前致谢。
【问题讨论】:
【参考方案1】:您没有从imports/lib/sessions.js
导出Sessions
,所以当您转到import
它时,Sessions
将不会被定义。试试这个:
import Mongo from 'meteor/mongo';
export const Sessions = new Mongo.Collection('sessions');
您可以在Todos
集合here 中看到类似的模式。
【讨论】:
感谢您的回答。这确实解决了模板中数据不打印的问题。但是,当我在 return 语句中添加一个属性时,如下所示:'return Sessions.findOne(name:'David').name' 我收到一条错误消息:无法读取未定义的属性'name'。名称确实显示在视图中,但控制台不允许我访问集合及其对象? 所以听起来原来的问题已经解决了。您的后续问题是相关的,但我无法在评论中对它们进行彻底的处理。这里有一些快速的想法:(1)可能有几个原因,但听起来你需要一个警卫 - 请参阅this article。 (2) 该集合在您的原始代码中是一个全局变量,现在是一个导出变量。有关如何处理此问题的想法,请参阅 this forum topic。以上是关于流星对象在控制台中可用,但抛出“无法读取属性 findOne of undefined”的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 JAVA Spring,@AutoWired 过滤器服务,但抛出 NPE
Django Ajax 表单工作但抛出 500(内部服务器错误)
带有 ***Service 的 Android 防火墙。响应已传递,但抛出 SocketTimeoutException
使用appium在android浏览器上运行selenium webdriver脚本,在模拟器上启动浏览器但抛出chromedriver异常