服务器端代码:
if (Meteor.isClient) {
Meteor.subscribe("messages");
Template.hello.greeting = function () {
Messages = new Meteor.Collection("messages");
Stuff = new Meteor.Collection("stuff");
return "Welcome to feelings.";
};
Template.hello.events({
'click input' : function () {
// template data, if any, is available in 'this'
if (typeof console !== 'undefined')
var response = Messages.insert({text: "Hello, world!"});
var messages = Messages.find
console.log("You pressed the button", response, Messages, Stuff);
}
});
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
Messages = new Meteor.Collection("messages");
Messages.insert({'text' : 'bla bla bla'});
});
}
客户端代码
<head>
<title>Test</title>
</head>
<body>
{{> hello}}
</body>
<template name="hello">
<h1>Hello World!</h1>
{{greeting}}
<input type="button" value="Click"/>
</template>
问题:
在javascript控制台中,我输入Messages.insert({'text':'test test test'}); 或单击按钮,在其下面写入数据库插入调用
我没有在mongo中看到插入的文档。去mongo控制台并做show dbs节目 消息(空)
我还有其他一些问题,我已经通过流星文档阅读并使用Google搜索,但我似乎无法找到明确的答案:
感谢。
答案 0 :(得分:11)
您需要在isClient
和isServer
范围之外的全局范围内创建MongoDB集合。因此,从该帮助函数中删除Messages = new Meteor.Collection("Messages")
并将其放在全局范围内。
您不能直接通过客户端执行插入,因为meteor不允许从客户端代码插入数据库。如果您仍想从客户端插入/更新,则必须为客户端定义数据库规则,请参阅docs。
或者首选的方法是创建一个插入文档的服务器方法,并使用Meteor.call()
从客户端调用它。
在Template.hello.greeting
中创建集合没有任何意义,因为集合用于在可从客户端访问的服务器上存储数据。
现在在Meteor中创建集合:
Messages = new Mongo.Collection("Messages")
代替:
Messages = new Meteor.Collection("Messages")