express+ejsでオブジェクトを含む配列をクライアント側のjsに渡す方法に嵌ったのでメモ。 サーバー側のコードがこれ。普通にキーと値(配列)をejsテンプレートにセットにすればいい。 var roominfo = function(roomname){ this.roomname=roomname; }; room_info_array= new Array(1); room_info_array[0]=new roominfo("room"); app.get("/", function(req, res){ res.render('login',{room_info:room_info_array}); });
expressの使い方を逆引き形式でまとめてみた。参考にしたのは2014年2月20日時点(express 3.4.8時点)の公式ドキュメントおよびソースコード、サンプルなど。 公式ドキュメント ソースコード サンプル ルーティングを設定する ルーティングを設定するには(i.e. パスとコントローラ関数をマッピングするには)app.get(path, func)やapp.post(path, func)など各HTTP Verbに対応した関数を使う ルーティング設定は書かれた順番に評価され、リクエストとpathの一致したものが適用される pathは文字列または正規表現を指定可能 funcのシグネチャはfunction(req, res[, next]) nextはコールバック関数 引数無しnext()で呼び出すと、次に一致するルーティング設定に処理が移る 引数有りnext(object)で呼び
現在はJSONP、近い未来はXHR2を用いたクロスサイト通信が主役になりそうですが、<iframe>と<script>で何とかしましょう、と言うエレガントな解を見かけましたので覚え書き。 Javascript歴短いので、実は当たり前の事だったらごめんなさい。 ↓こんなコードを作っておいて、 function foo() { var iframe = document.createElement('iframe'); document.body.appendChild(iframe); var iframe_document = iframe.contentDocument; iframe_document.writeln('<body></body>'); var script = iframe_document.createElement('script'); iframe_d
なんだかよく分からないけどgetやpostのルート指定してるのにタイムアウトになる var express = require('express'); var app = express(); app.get('/api/party.json', function(req, res){ res.end(); });res.end()を指定しないとタイムアウトになります。 expressでのgetの取得方法 function(req, res){ req.query; //getのデータがオブジェクトの状態で入っている }; ユニットテスト テストフレームワーク mocha - hokaccha memo MongoDBと連携したい MongoDBのインストールについてはこちら mongoose以外の方法もあります→GitHub - christkv/node-mongodb-native:
mongooseは,model作成時には自動的に小文字,かつ複数形に変換します. this.User = this.mongoose.model('User', this.UserSchema); //←'User'は'users'になる そのため,mongodbに予めコレクションを用意する場合は「users」としてコレクション名を登録する必要があります. mongodbの性質上,useするのは存在していないモデルでも出来てしまうので,存在していないコレクションからオブジェクトが取り出せるはずもなく,これに気がつくのに時間がかかった.すごく基礎のことでした.ドキュメントよく読まなかったツケが...
sails+mongoDBで開発してるけど、node.jsでバッチ作ろうと思ってmongoDBの接続のためにmongoose入れたら勝手に複数形のコレクション名になって困っていたが以下の感じで指定できる模様 1 var mongoose = require("mongoose"); 2 var schema = new mongoose.Schema({ 3 name: String 4 }, { collection: 'user'}); 5 var User = mongoose.model('User', schema); // 本来だとusersになる あと複数形にしない、単数形のまま(正確には不可算名詞)のリストは node_modules/mongoose/lib/utils.js exports.uncountables = のところにあるらしい こちらに追加しても動く模様
例えばMongoDBのhogeデータベース内に既存でfugaってコレクション(テーブル)があるとすると、以下では何も帰ってこない。 // mongodbの準備 var mongoose = require('mongoose'); mongoose.connect('mongodb://127.0.0.1/hoge'); // スキーマの登録 var Fuga = new mongoose.Schema({hoge: Number, fuga: String}); mongoose.model('fuga', Fuga); // 取得 var fuga = mongoose.model('fuga'); fuga.find({}, function(err, docs) { if(!err) { for (var i = 0; i CoC(Convention over C
(Qiitaのアカウント作成しなおしたので再掲) mongooseで任意のデータを保存する方法としてこんなやり方があるらしい。写経がてら自分なりにコードを書いてみた。 'use strict'; var mongoose = require('mongoose'), async = require('async'); // テストコード用 var anyDataSchema = new mongoose.Schema({ // 空のスキーマを定義 }); anyDataSchema.static('insert', function (data, callback) { this.collection.insert(data, callback); }); anyDataSchema.static('drop', function (callback) { this.collection.
つくるもの 以下のサイトに温度が表示されていると思います。 これは、Spark Core という Arduino 互換のハードで取得した温度です。このハードが、直接 WiFi に繋がり、クラウドに情報をアップロードしています。 ハードウェア編 SparkCore とは http://spark.io で発売される、Arduino + WiFi がワンセットになったデバイスです。以下の特徴があります。 使われているチップがCC3000なので、TELEC(技適)を通過しています。=>参考 SparkCore用のBaaSのクラウドがあり、簡単にデータのやり取りが可能です 必要なモノ・買い方 SparkCoreは、以下から買えます。 注意点は 安い Photon というのは2015年2月発売予定で、さらにTELECはまだ通っていません。SparkCoreを購入しましょう USからなので、届くまで時
概要 MongoDBの薄い本を読みながらMongoDBを勉強し始めたので、自分の理解を試すために書きます。 簡単なCRUDの説明になります。 また、以下の内容で簡単なMongoDBの使い方がわかった方は、[Groovy] MongoDBを簡単に扱えるイケてる言語Groovy -基本的なCRUD-を見ていただければ、プログラミング言語Apache GroovyからMongoDBを扱う方法も確認していただけます。 インストール Synapticパッケージマネージャからインストールします。 mongodb というパッケージを選択してインストールしてください。 インストール構成はまぁ普通な感じでしょうか?? 重要そうなファイルは以下のように配置されています。 /usr/bin/mongo /usr/bin/mongod /etc/mongodb.conf /var/lib/mongodb (con
Googleもモバイル向けのBaaSである「Cloud Endpoints」というものを出しました。これは、Google App Engine上で作ったサービスを簡単にAndroidやiOSなどのモバイルからREST APIとしてアクセスできるようにするためのものです。 もう少し言うと、App Engine上で、JavaやPythonを用いて作ったクラスとメソッドから、サーバサイドのRESTインターフェースとそのクライアントサイドのJavaScript、Java(Android用)、Objective-C(iOS用)コードを生成してくれるものです。AndroidやiOS、もしくはWebアプリなどから簡単に生成したコードをコールすることで、App Engineのメソッドをシームレスにコールすることができます。 App Engineの開発でJavaを利用する場合に必要なものとしては、Googl
Mongoose の 3.6 から ネストした populate に対応したそうなので動作確認を試みたのですが、GitHub の Issue で問い合わせをするまでやり方が分かりませんでした。 他の方もハマるかもしれないので、ここにまとめておきます。 誤った書き方 最初、以下のようなコードを書いていました。 { "name": "mongoose-populate-test", "version": "0.1.0", "private": true, "dependencies": { "mongoose": "3.6.4", "async": "0.1.22" }, "engines": { "node": ">=0.10.2", "npm": ">=1.2.15" }, "scripts": { "start": "node test.js" } } var assert = requ
git config --global --add safe.directory '%(prefix)///wsl.localhost/Ubuntu/Gitで管理したいリポジトリ' UbuntuのところはWSL2に入れているディストリビューションによって変わると思われる -vでホストとコンテナがファイルを共有している場合、ホストのuidとコンテナのuidが一致しているとパーミッションで書き込めない問題が起こらない ので、Dockerfileでuid=1000のユーザを作ろうとした。イメージはnode:latest RUN groupadd --force -g 1000 user RUN useradd -ms /bin/bash --no-user-group -g 1000 -u 1000 user useradd: UID 1000 is not unique こんなエラーが出る F
ずっと RDB を使っていると、mongodb など NOSQL のスキーマ設計する際に正規化を意識してちょいちょい思考が固まるのですが、mongodb の O/R マッパーとして有名なmongooseを使う事で、複数の Collection 間のリレーションと join っぽいことをエミュレーションできるので紹介します。 まず最初に、mongodb で RDB のような第 3 正規化までやって、、、うんぬんみたいなことを本気でやりたかったら素直に RDB を使いましょう。 今回はあくまで、mongodb のお作法に従いながら、たまに「リレーションっぽいことできればいいよねー」といった程度の Tips です。多用注意です。 今回の内容は、こちらの公式ドキュメントに基づくものです。 Mongoose Query Population v3.8.23 スキーマ定義 今回のスキーマは「社員(Em
リレーションの指定 Schemaに{ type: ObjectId, ref: 'Story' }のように指定する var mongoose = require('mongoose') , Schema = mongoose.Schema var personSchema = Schema({ _id : Number, name : String, age : Number, stories : [{ type: Schema.ObjectId, ref: 'Story' }] }); var storySchema = Schema({ _creator : { type: Number, ref: 'Person' }, title : String, fans : [{ type: Number, ref: 'Person' }] }); var Story = mongoose.
MongoDB has the join-like $lookup aggregation operator in versions >= 3.2. Mongoose has a more powerful alternative called populate(), which lets you reference documents in other collections. Population is the process of automatically replacing the specified paths in the document with document(s) from other collection(s). We may populate a single document, multiple documents, a plain object, multi
node(.js)と相性が良いということで、MongoDB とそのJavaScript O/R マッパーライクなモデリングライブラリの Mongoose を使い始めました。 MongoDBと言えばドキュメント指向モデルでそれを特徴づける Embedded Documents が有名ですが、この機能を Mongoose から利用する上で躓いたので、メモしておきます。 Embbed Document の Array について var Users = new Schema({ name : String }); var Comments = new Schema({ title : String , body : String , date : Date }); var BlogPost = new Schema({ author : { type: ObjectId, ref: 'User'
MongoDB (PART2) もどる インストール Ubuntu 次のコマンドで最新のMongoDBをインストールできる。これにより、自動的にサービスとして実行される。 sudo apt-get install mongodb-10gen ターミナルでmongoコマンドを実行し、MongoDBに接続できることを確認する。 Windows ダウンロードページから32bitあるいは64bitバージョンのZIPファイルをダウンロードする。 適当な場所にそのファイルを移動し解凍する。(以下の例では解凍した場所をC:\bin\MongoDBとする) データベースの場所を作成する。デフォルトはC:\data\dbである。 コマンドプロンプトでディレクトリをC:\bin\MongoDB\binに移動し、mongod.exeを実行する。ただし、データベースの場所がデフォルトの位置(C:\data\db)
これは、jsCafe18で話したSlideです。 概要 これから、「Ractive.js」という js上でReactiveなUIを とてもsimpleにbuildするためのlibraryの話をします 目次 reactive programming ractive.js 他のframeworkとの比較 Backboneに入れてみる そもそもReactive Programmingとは? 古くは、2003年頃から日本のblogでも幾つか言及されてる模様 去年、更に色々と動きが出てきた。 2013/7 ガートナーの2013年のreportで扱われてる 2013/9 リアクティブマニフェストが出た。これ訳されてる方がいた。 2013/9 infoQの記事見ると大体の流れや概要が分かる バズりと意味の広がり なんか徐々にバズり感がある 他のバズりワード(cloud等)と同じように意味が広義に、より抽
intro 先日 Meteor について調べて発表するにあたり色々調べたり、そのあと何人かの方々とお話させて頂いた中で、 思うところが出てきたので、アウトプットしたいと思います。 Meteor について発表してきました。 - Block Rockin’ Codes Meteor 以前からも思っていたところもありますが、ちょうどいいので Meteor も対比に出しながら書いてみます。 Reactive Programming @naoya_ito さんも書いてたように、やはり一番大きいのはここだと思います。 Meteor.js - naoyaのはてなダイアリー 簡単に説明すると、 よく Excel に例えられますが、あるセルに他のセルの値を用いた計算式を埋めておくと、 その参照先のデータが変わった時に、式を埋め込んだセルの値も連動して変わるようなあれです。 プログラミングで見るなら、 例えば
Tokyo Otaku ModeではNode.jsからMongoDBにアクセスするのにODMとしてMongooseを採用しています。 Mongoose(ODM)を利用するメリットとしては、 collectionのSchema設計がコードに残る virtualなどデータ周りの機能がModelに集約できる populationが利用できる などが上げられます。 どれもサービスを効率的に作る上で助かる機能ばかりですが、とくにpopulationは別ドキュメントのreference(_id)を持っているだけで、自動的にドキュメントに展開してくれる強力な機能です。 一方で、DBロック回避の目的やある程度の規模になってDBを分割するようになると、別DBのcollectionをpopulateできないという問題がでてきます。 Mongooseの仕様上、特定DBへのconnectionとModel(col
前回に引き続き、今回はサブドキュメントとリファレンスについてです。MongoDBではEmbedding and Linkingとして解説されており、Joinを持たないMongoDBの設計手法の1つとしてよく使われます。 2. sub-docs MongooseではSchemaを定義してドキュメントを操作しますが、別のドキュメント配列をSchemaの一部として保持することができます。以下、これまで使用していたuserSchemaにhistSchemaというドキュメントを持たせました。 // SubDocument Schema var operations = 'create,submit,cancel'.split(','); var histSchema = mongoose.Schema({ operation : { type: String, enum: operations },
I'm receiving the following error with express: Error: request entity too large at module.exports (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/node_modules/raw-body/index.js:16:15) at json (/Users/michaeljames/Documents/Projects/Proj/mean/node_modules/express/node_modules/connect/lib/middleware/json.js:60:5) at Object.bodyParser [as handle] (/Users/mi
追記 11/12/6 少し誤字脱字を修正、加筆 11/12/7 koichik さんにコメントで頂いたリンクと、その内容について追記 11/12/7 edvakf さんに頂いた指摘を修正 本文 この記事は、JavaScript Advent Calendar 2011 (Node.js/WebSocketsコース) の 4 日目の記事です。 Node.js には Stream という API があります。 Stream はとても重要な技術で、 「Stream を制するものは、 Node.js を制す」と言っても過言ではありません。 実際、 Stream は Node.js が得意とする I/O の部分を使いこなすために、 押さえておくべき技術なので、今回はこの Stream について紹介したいと思います。 参考 Jxck's OutPut - Node.js の Stream I/O のお
Stream# Stability: 2 - Unstable ストリームは Node の様々なオブジェクトで実装される抽象的なインタフェースです。 例えば HTTP サーバへのリクエストは標準出力と同様にストリームです。 ストリームは読み込み可能、書き込み可能、またはその両方です。 全てのストリームは EventEmitter のインスタンスです。 Stream のベースクラスは require('stream') でロードすることができます。 Readable ストリーム、Writable ストリーム、Duplex ストリーム、Transform ストリームのベースクラスが提供されます。 Compatibility# 以前のバージョンの Node では、読み込み可能なストリームのインタフェースは よりシンプルでしたが、強力ではなく使いやすくもありませんでした。 read() メソッドを
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く