流星集合没有在启动时自动创建,并且 autoform 不会发布到 mongo db

Posted

技术标签:

【中文标题】流星集合没有在启动时自动创建,并且 autoform 不会发布到 mongo db【英文标题】:Meteor collection not being created automatically on start and autoform doesn't post to mongo db 【发布时间】:2016-10-31 05:40:25 【问题描述】:

我是流星和 mongo db 的新手。我正在使用meteor@1.3.4.1 制作应用程序。我正在制作一个名为“/imports/api/collections/recipe.js”的文件。在这里,我正在创建一个集合并将这个文件导入到“/server/main.js”和“/client/main.js”中。只有在 recipe.js 中,我发布了 Recipe 集合,然后在我的客户文件中订阅它。到此为止,一切都是正确的。然后我使用 autoform 创建了一个表单,它运行良好并且被创建。但是这个表格永远不会被张贴。

首先,我的假设是当服务器启动时,我的数据库应该已经创建了一个名为 recipe 的集合,但它没有。

其次,为什么 autoform 不起作用?我认为是因为第一个原因。

在客户端,我可以通过 Mongol(流星玩具)查看我的食谱收藏。

我的食谱文件-'/imports/api/collections/recipe.js':

import  Meteor  from 'meteor/meteor';
import  Mongo  from 'meteor/mongo';
import  SimpleSchema  from 'meteor/aldeed:simple-schema';

var RecipesCollection = new Mongo.Collection('recipes');

RecipesCollection.allow(
    insert(userId, doc)
        return !!userId;
    
)

var RecipeSchema = new SimpleSchema(
    name: 
        type: String,
        label: "Name"
    ,
    desc: 
        type: String,
        label: "Description"
    ,
    author: 
        type: String,
        label: "Author",
        autoValue()
            return this.userId
        ,
        autoform:
            type: "hidden"
        
    ,
    createdAt: 
        type: Date,
        label: "Created At",
        autoValue()
            return new Date();
        ,
        autoform:
            type: "hidden"
        
    
);

RecipesCollection.attachSchema( RecipeSchema );

if (Meteor.isServer) 
  // This code only runs on the server
  Meteor.publish('recipes', function tasksPublication() 
    return RecipesCollection.find(author: this.userId);
  );


export const Recipes = RecipesCollection;

我的服务器文件:'/server/main.js':

import  Meteor  from 'meteor/meteor';
import '/imports/startup/server/start.js';
import '/imports/api/collections/recipe.js';

我客户的js文件:

import  Template  from 'meteor/templating';
import  Recipes  from '/imports/api/collections/recipe.js';

import '/imports/ui/pages/NewRecipe.html';
Template.NewRecipe.onCreated(function bodyOnCreated() 
    Meteor.subscribe('recipes');
)
Template.NewRecipe.helpers(
    recipesCollection() 
        return Recipes;
    
);

新配方模板:

<template name="NewRecipe">
    <div class="new-recipe-container">
        > quickForm collection=recipesCollection id="insertRecipeForm" type="insert" class="new-recipe-form" 
    </div>
</template>

我正在使用包:Collection2 和 autoform。任何帮助或建议将不胜感激。谢谢

请随时通过 fork 我的流星学习项目使其工作。将是非常伟大的。 - https://github.com/devin6391/meteorLearn1/tree/master/recipebook

【问题讨论】:

【参考方案1】:

好的解决了....对此感到非常惭愧,因为这又是一个流星包的版本问题 - 'accounts-ui'。由于著名的 CDN 问题,有时软件包在印度无法升级。

不过,集合不会自己创建。我不得不去 mongoDB 控制台并自己创建它。然后只有自动表单发布到它

【讨论】:

【参考方案2】:

为什么要在/server/main.js 中重新导入meteor/meteor?

为此,我使用如下导出:

export const RecipesCollection = new Mongo.Collection('recipes');

然后使用集合的名称:

> quickForm collection="RecipesCollection" id="insertRecipeForm" type="insert" class="new-recipe-form" 

【讨论】:

我不会重新导入流星/流星。根据 es6 modulel 系统,它对于不同的文件是不同的。我也不能直接使用RecipesCollection 作为它的模块变量而不是窗口或模板的变量 -试过了。尽管您对多个流星/流星导入是正确的。我修好了。 RecipesCollection 集合不能直接放入快速表单,因为它不在窗口范围内。

以上是关于流星集合没有在启动时自动创建,并且 autoform 不会发布到 mongo db的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法告诉流星集合是静态的(永远不会改变)?

当我们从 Mongo 控制台更新集合时,Meteor Apollo 没有更新 UI

无法使用 graphql 突变更新流星用户集合

流星白屏代替闪屏

尝试在服务器端插入文件时流星文件集合显示为空?

如何在流星上创建自动增量字段?