无法读取属性'插入'未定义的。我没有正确发布吗?

时间:2016-11-16 16:15:05

标签: javascript meteor import publish-subscribe undefined-behavior

我的应用程序运行正常,直到我将集合定义从client/main.js文件外部化到../imports/api/tasks.js文件。

在此移动之后,我不断在浏览器中收到此错误消息:Uncaught TypeError: Cannot read property 'insert' of undefined在浏览器控制台中。此错误消息指向行main.js:1206,即:

/对myApp
../客户/ main.js

import { Images } from '../imports/api/tasks.js';
Meteor.subscribe('Images');

FS.Utility.eachFile(event, function(file) {
var teste = Images.insert(file,  function (err, fileObj) {

var insertedIdSession = teste._id;
session.set("insertedBuyId", insertedIdSession);
Images.find().count());

  });

/ myApp
../进口/ API / tasks.js

import { Mongo } from "meteor/mongo";
Images = new FS.Collection("images", {
stores: [new FS.Store.FileSystem("images", {path: "~/uploads"})] });

/对myApp
../服务器/ main.js

import { Images } from '../imports/api/tasks.js';

Meteor.publish('Images', function(){
return Images.find();
});

我已经研究但未能找到解决方案。善意指出我出错的地方。

2 个答案:

答案 0 :(得分:2)

它告诉你“图像”没有定义。

从我所看到的你的代码,.. / import / api / toks.js不会导出任何东西,这意味着

import { Images } from '../imports/api/tasks.js';

不会给你任何东西,实际上它会用null替换全局变量Images。所以我认为解决方案是用这个替换导入:

import '../imports/api/tasks.js';

或者您可以将tasks.js放在/ common中,这将完成相同的工作

答案 1 :(得分:1)

您需要导出Images集合才能将其导入其他文件,例如:

import { Mongo } from "meteor/mongo";

export const Images = new FS.Collection("images", {
  stores: [new FS.Store.FileSystem("images", {path: "~/uploads"})]
});