【问题标题】:How to make a simple database query in Meteor如何在 Meteor 中进行简单的数据库查询
【发布时间】:2013-11-22 20:32:43
【问题描述】:

每当我对应用程序有新想法时,我都会从 Meteor 开始。每次我最终使用别的东西。而且我认为这归结为我不知道如何进行简单的数据库查询。

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

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

到目前为止看起来很简单。根据我的理解,现在没有办法在不先将信息放入数据库的情况下将信息发送给客户。假设我们有一些函数 addToDB 接受查询并将图像信息输入数据库。

Template.image.events({
    'click .showImage': function() {
        addToDB($('.description').val());
    }
});

太棒了!这还不算太糟糕。但是现在要将数据发送回客户端...

//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>

然后将模板填充函数改为:

Template.image.info = function() {
    return Images.find({}, {limit: 1});
}

瞧!

我花了比我愿意承认的时间更长的时间来完成这一切。如果它只是普通的旧节点,我可以使用一些简单的 jQuery。

但 Meteor 拥有一百万个令人惊叹的功能,我真的很想利用这些功能。所以我希望有人能给我指路。我在这个过程中犯了哪些错误,以及最终的结果是什么?在流星应用程序中完成这项工作的最好、最干净、最简单的方法是什么。

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

【问题讨论】:

    标签: javascript mongodb meteor meteorite database


    【解决方案1】:

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

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

    • 考虑使用 Session 来保存用户通过事件设置的变量。
    • 通过将 Session 变量传递给 Deps.autorun 函数来订阅您想要的数据
    • 通过将 Session 变量传递给模板来显示您想要的数据。
    • 基本的 javascript 规则仍然适用 - null.someThingIWant 是一个错误。一个方便的模式是return something &amp;&amp; something.someThingIWant;

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

    【讨论】:

    • 谢谢,这就是我正在寻找的答案。会话变量以及最后一种模式是我没有想到的。
    • @fnsjdnfksjdb:如果对您有帮助,记得点赞并接受答案!
    猜你喜欢
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2020-05-23
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    相关资源
    最近更新 更多