[英]Meteor.js Collection not being created in mongo
服務器端代碼:
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顯示消息(空)
我還有其他一些問題,我已經閱讀了流星文檔並且也用谷歌搜索,但是我似乎找不到明確的答案:
謝謝。
您需要在全局范圍(如isClient
和isServer
范圍之外)中創建MongoDB集合。 因此,從該輔助函數中刪除Messages = new Meteor.Collection("Messages")
並將其放置在全局范圍內。
您不能直接通過客戶端執行插入操作,因為流星不允許從客戶端代碼插入數據庫。 如果仍要從客戶端插入/更新,則必須為客戶端定義數據庫規則,請參閱docs 。
或者首選方法是創建一個服務器方法來插入文檔,然后使用Meteor.call()
從客戶端調用它。
在Template.hello.greeting
內創建集合沒有任何意義,因為這些集合用於將數據存儲在可從客戶端訪問的服務器上。
現在可以在Meteor中創建收藏集:
Messages = new Mongo.Collection("Messages")
代替:
Messages = new Meteor.Collection("Messages")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.