Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Meteor中进行简单的数据库查询_Javascript_Mongodb_Meteor_Meteorite_Database - Fatal编程技术网

Javascript 如何在Meteor中进行简单的数据库查询

Javascript 如何在Meteor中进行简单的数据库查询,javascript,mongodb,meteor,meteorite,database,Javascript,Mongodb,Meteor,Meteorite,Database,每次我对一个应用程序有了新的想法,我就从Meteor开始。每次我用了别的东西。我认为这归结于我不知道如何做一个简单的数据库查询 这里有一个假设的例子。我想制作一个应用程序,用户在框中键入内容,按下按钮,然后显示他们键入的任何内容的图像。它使用一些图像搜索api <template name="image"> <input type="text" class="description"></input> <button class="sho

每次我对一个应用程序有了新的想法,我就从Meteor开始。每次我用了别的东西。我认为这归结于我不知道如何做一个简单的数据库查询

这里有一个假设的例子。我想制作一个应用程序,用户在框中键入内容,按下按钮,然后显示他们键入的任何内容的图像。它使用一些图像搜索api

<template name="image">
    <input type="text" class="description"></input>
    <button class="showImage"></button>
    <img src="{{img}}"></img>
</template>
太好了!那还不算太坏。但现在要将数据发送回客户端

//server.js
Meteor.publish("image", function(query) {
    Images.find({q: query});
}
但是等等。我们不能只在客户端加载时订阅,因为我们还不知道查询。因此,事件处理程序可能需要

Template.image.events({
    'click .showImage': function() {
        addToDB($('.description').val());
        Deps.autorun(function() {
        Meteor.subscribe("images", $('.description').val());
    });
    }
});
好的,让我们把它输入到模板中

Template.image.img = function() {
    return Images.findOne().imgsrc;
}
不,这会导致一个错误,因为当第一次加载模板时,我们还没有订阅图像。因此,我们可以像这样更新模板:

<template name="image">
    <input type="text" class="description"></input>
    <button class="showImage"></button>
    {{#each info}}
    <img src="{{info.img}}"></img>
    {{/each}}
</template>

今天晚上,我花了比我愿意承认的时间更长的时间跌跌撞撞地经历了这一切。如果它只是普通的旧节点,我可以使用一些简单的jQuery

但是Meteor有一百万个惊人的特性,我真的很想利用它们。所以我希望有人能给我指路。在这个过程中,我犯了什么错误?在最后的结果中,我犯了什么错误?在meteor应用程序中实现这一点的最好、最干净、最简单的方法是什么


这是如此复杂,在一个使许多其他事情变得如此简单的框架内。那么,我怎样才能进行一个简单的数据库查询呢?

请考虑查看他们提供的meteor示例。所有示例都具有获取用户输入、管理集合以及向模板显示集合查询的功能

大多数代码看起来都不错,但您同时提出了几个问题,并且从一个难以回答的角度出发。一些一般性说明:

  • 考虑使用会话来保存用户通过事件设置的变量
  • 通过将会话变量传递给Deps.autorun函数,订阅所需的数据
  • 通过向模板传递会话变量来显示所需的数据
  • 基本javascript规则仍然适用-
    null。someThingIWant
    是一个错误。一个方便的模式是
    返回something&&something.somethingingiwant

上面代码中的一个问题是发布没有返回查询结果。我想这是一个打字错误。

谢谢,这就是我一直在寻找的答案。会话变量和最后一种模式是我没有想到的。@fnsjdnfksjdb:记住向上投票,如果答案对你有帮助,就接受它!
<template name="image">
    <input type="text" class="description"></input>
    <button class="showImage"></button>
    {{#each info}}
    <img src="{{info.img}}"></img>
    {{/each}}
</template>
Template.image.info = function() {
    return Images.find({}, {limit: 1});
}