MeteorのUsersCollectionのpublishの仕方
つまづいたところ
autopublishを消すとコレクションが同期されなくなるので当然
Meteor.users.find().fetch();
が本来の働きをしてくれない(バージョン1.4.2.3で動かして見たところ自分のデータしか返さない)
Meteor.publish(name,function() { return Meteor.users.find(); }
をしたら同期されるはずだがusersコレクションの名前がわかならいので期待した動作をしてくれない。
解決策
Meteor.publish(null,function(){ return Meteor.users.find(); });
あとはfieldsオプションを与えるなどしてお好みのデータを生成するだけ
参考サイト
ClojureScriptでNode.jsを動かす
動かしてみたコード
Clojurescript / node.js basic examples · GitHub
追加で
(nodejs/enable-util-print!)
を入れないと動かないっぽい
参考:Quick Start · clojure/clojurescript Wiki · GitHub
非ビルドツール編
build.clj
(require 'cljs.build.api) (cljs.build.api/build "src" {:main "helloserver" :output-to "out/main.js" :output-dir "out" :target :nodejs})
Leiningen編
project.clj
(defproject cljs-test "0.1.0-SNAPSHOT" :plugins [[lein-cljsbuild "1.1.4"]] :dependencies [ [org.clojure/clojure "1.8.0"] [org.clojure/clojurescript "1.8.51"]] :cljsbuild { :builds [{ :source-paths ["src"] :compiler { :main "helloserver" :output-to "out/main.js" :output-dir "out" :target :nodejs :optimizations :none :pretty-print true}}]})
Meteorでチャットシステム構築
Meteorでチャットシステムを構築してみた
client.js
import { Meteor } from 'meteor/meteor' import { Mongo } from 'meteor/mongo' Messages = new Mongo.Collection('messages'); Template.Chat.helpers({ messages: Messages.find({},{sort:{date:-1}}) }); Template.Chat.events({ 'submit #talk': event => { event.preventDefault(); if(event.target.mes.value != "") { Messages.insert({ username: event.target.name.value, mes_text: event.target.mes.value },err => { if(err) { console.log(err); } else { event.target.mes.value = ""; console.log("add"); } }) } } });
server.js
import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; Messages = new Mongo.Collection('messages'); Meteor.startup(() => { });
main.html
<head> <title>Chat</title> </head> <body> </body> <template name="Chat"> <h1>チャット</h1> <form id="talk"> <p>名前:<input type="text" name="name"></p> <p>メッセージ:<input type="text" name="mes"></p> <input type="submit" value="送信"> </form> {{#each messages}} <div> <p>{{username}} : {{mes_text}}</p> </div> {{/each}} </template>
client用とserver用のscriptを分けた場合、別々に宣言する必要があるらしい。client側だけで宣言したらserver側には保存されないっぽい。同じファイルに記述した場合、一番上にでも宣言しておけば問題はなさそう。
参考
qiita.com
tech-sketch.jp
Introducing Meteor API Docs | Meteor API Docs
一週間以上前に書いたコードなのでmeteorのどこのドキュメント見たかわからなくなった・・・・
DBの使い方とtemplateの使い方を把握していたらすぐ理解できると思う。