<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Node.js &#8211; REONTOSANTA</title>
	<atom:link href="https://knowledge.reontosanta.com/archives/category/programming/nodejs/feed" rel="self" type="application/rss+xml" />
	<link>https://knowledge.reontosanta.com</link>
	<description>Collection of personal knowledge</description>
	<lastBuildDate>Thu, 18 Jun 2015 00:53:36 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<atom:link rel='hub' href='https://knowledge.reontosanta.com/?pushpress=hub'/>
<site xmlns="com-wordpress:feed-additions:1">83369280</site>	<item>
		<title>Cloud9でNode.js+MongoDB+mongooseを利用する</title>
		<link>https://knowledge.reontosanta.com/archives/489</link>
					<comments>https://knowledge.reontosanta.com/archives/489#respond</comments>
		
		<dc:creator><![CDATA[mogice]]></dc:creator>
		<pubDate>Thu, 18 Jun 2015 00:53:36 +0000</pubDate>
				<category><![CDATA[Node.js]]></category>
		<guid isPermaLink="false">http://knowledge.reontosanta.com/?p=489</guid>

					<description><![CDATA[Cloud9ではMongoDBは最初からインストールされているので今&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[<p>Cloud9ではMongoDBは最初からインストールされているので今回はこれを利用する。</p>
<p>まずはDashboardで「CREATE NEW WORKSPACE」を選択し、プロジェクトの名前を決め、Node.jsを選択して作成する。</p>
<p>しばらく待つとプロジェクトの準備が終わり、「START EDITING」ボタンを選択すると編集できる。</p>
<p>早速そのままserver.jsを開いて実行すると、単純なチャットアプリが最初から動かせる状態になっている。</p>
<p>ここでは名前とメッセージを入力して発言する形になっているので、この内容をMongoDBに保存するように修正する。</p>
<p>まずはMongoDBのバージョンを確認する。</p>
<p>下部のTerminalで次のように入力する。</p><pre class="urvanov-syntax-highlighter-plain-tag">$ mongod --version
db version v2.6.9
2015-06-12T05:08:12.352+0000 git version: df313bc75aa94d192330cb92756fc486ea604e64
$</pre><p>&nbsp;</p>
<p>そしてNode.jsからMongoDBへアクセするためのドライバが必要になるので準備をする。</p>
<p>今回は、mongooseを使ってみる。</p>
<p>Terminalからnpmでモジュールをインストール。</p><pre class="urvanov-syntax-highlighter-plain-tag">$ npm install mongoose</pre><p>&nbsp;</p>
<p>MongoDBを起動。</p><pre class="urvanov-syntax-highlighter-plain-tag">$ mkdir db
$ echo 'mongod --nojournal --noprealloc --dbpath db' &gt; mongod
$ chmod a+x mongod
$ ./mongod</pre><p>&nbsp;</p>
<p>続いてメッセージ情報を保存するための空のデータベースを作成する。</p>
<p>Window-&gt;New Terminalから新しいTerminalを立ち上げ、次のようにメッセージ情報を登録するためのCollectionを作成する。</p>
<p>今はドキュメントが何もない状態。</p><pre class="urvanov-syntax-highlighter-plain-tag">$ mongo
MongoDB shell version: 2.6.9
connecting to: test
&gt; show dbs
admin (empty)
local 0.078GB
&gt; use post
switched to db post
&gt; db.createCollection("posts");
{ "ok" : 1 }
&gt; db.posts.find()
&gt;</pre><p>&nbsp;</p>
<p>最後にserver.jsのコードにデータベースへアクセスする処理を追加する。</p><pre class="urvanov-syntax-highlighter-plain-tag">//
// # SimpleServer
//
// A simple chat server using Socket.IO, Express, and Async.
//
var http = require('http');
var path = require('path');

var async = require('async');
var socketio = require('socket.io');
var express = require('express');

//
// ## SimpleServer `SimpleServer(obj)`
//
// Creates a new instance of SimpleServer with the following options:
// * `port` - The HTTP port to listen on. If `process.env.PORT` is set, _it overrides this value_.
//
var router = express();
var server = http.createServer(router);
var io = socketio.listen(server);

router.use(express.static(path.resolve(__dirname, 'client')));
var messages = [];
var sockets = [];

// --------------------------------------------------------
// ここから
// --------------------------------------------------------
var mongoose = require('mongoose');
// スキーマ定義
var PostSchema = new mongoose.Schema({
name: String,
text: String
});
// モデルとして登録
var Post = mongoose.model('Post', PostSchema);
// mongodbに接続
mongoose.connect('mongodb://localhost:27017/post', // postの部分はデータベース名
// コールバックでエラー時の処理が書ける。
function(err) {
if (err) {
console.log(err);
} else {
console.log('connection success!');
}
}
);
// findしてDBの値を表示
Post.find({}, function(err, docs){
if(!err){
console.log("num of item =&gt; " + docs.length);
for(var i=0; i&lt;docs.length; i++){
console.log(docs[i].name);
console.log(docs[i].text);
var doc = docs[i];
// メッセージ情報を格納
messages.push(doc);
}
console.log("find!");
} else {
console.log("not find!");
}
});
// --------------------------------------------------------
// ここまで
// --------------------------------------------------------

io.on('connection', function (socket) {
messages.forEach(function (data) {
socket.emit('message', data);
});

sockets.push(socket);

socket.on('disconnect', function () {
sockets.splice(sockets.indexOf(socket), 1);
updateRoster();
});

socket.on('message', function (msg) {
var text = String(msg || '');

if (!text)
return;

socket.get('name', function (err, name) {
var data = {
name: name,
text: text
};

// --------------------------------------------------------
// ここから
// --------------------------------------------------------
// DBに登録
var post = new Post();
post.name = name;
post.text = text;
post.save(function(err){
if(!err){
console.log("saved! name:" + name + ",text:" + text);
}
});
// --------------------------------------------------------
// ここまで
// --------------------------------------------------------

broadcast('message', data);
messages.push(data);
});
});

socket.on('identify', function (name) {
socket.set('name', String(name || 'Anonymous'), function (err) {
updateRoster();
});
});
});

function updateRoster() {
async.map(
sockets,
function (socket, callback) {
socket.get('name', callback);
},
function (err, names) {
broadcast('roster', names);
}
);
}

function broadcast(event, data) {
sockets.forEach(function (socket) {
socket.emit(event, data);
});
}

server.listen(process.env.PORT || 3000, process.env.IP || "0.0.0.0", function(){
var addr = server.address();
console.log("Chat server listening at", addr.address + ":" + addr.port);
});</pre><p>これでアプリを一旦終了し、再度実行してもメッセージ内容が保持されるようになった。</p>
<p>&nbsp;</p>
<div class="knowl-after-content-ad" style="margin-top: 40px;" id="knowl-2251247037"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8913642688016174" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block;" data-ad-client="ca-pub-8913642688016174" 
data-ad-slot="2719999442" 
data-ad-format="auto"></ins>
<script> 
(adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
</div><div class="knowl-after-content-relation" id="knowl-2787390396"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8913642688016174" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block;" data-ad-client="ca-pub-8913642688016174" 
data-ad-slot="7848218644" 
data-ad-format="autorelaxed"></ins>
<script> 
(adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://knowledge.reontosanta.com/archives/489/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">489</post-id>	</item>
		<item>
		<title>Node.jsでコンソールにメッセージを出力する</title>
		<link>https://knowledge.reontosanta.com/archives/487</link>
					<comments>https://knowledge.reontosanta.com/archives/487#respond</comments>
		
		<dc:creator><![CDATA[mogice]]></dc:creator>
		<pubDate>Thu, 18 Jun 2015 00:38:46 +0000</pubDate>
				<category><![CDATA[Node.js]]></category>
		<guid isPermaLink="false">http://knowledge.reontosanta.com/?p=487</guid>

					<description><![CDATA[Node.jsがインストール済みであることを前提とする。 以下のコー&#46;&#46;&#46;]]></description>
										<content:encoded><![CDATA[<p>Node.jsがインストール済みであることを前提とする。</p>
<p>以下のコードを記述し、workspace直下にhelloworld.jsというファイル名でファイルを作成する。</p><pre class="urvanov-syntax-highlighter-plain-tag">console.log("Hello World!");</pre><p>&nbsp;</p>
<p>Node.jsから起動する。</p>
<p>コンソールで以下のコマンドを実行する。</p><pre class="urvanov-syntax-highlighter-plain-tag">node helloworld.js</pre><p>これでコンソールに&#8221;Hello World!&#8221;が出力される。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="knowl-after-content-ad" style="margin-top: 40px;" id="knowl-1386770106"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8913642688016174" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block;" data-ad-client="ca-pub-8913642688016174" 
data-ad-slot="2719999442" 
data-ad-format="auto"></ins>
<script> 
(adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
</div><div class="knowl-after-content-relation" id="knowl-1293047012"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8913642688016174" crossorigin="anonymous"></script><ins class="adsbygoogle" style="display:block;" data-ad-client="ca-pub-8913642688016174" 
data-ad-slot="7848218644" 
data-ad-format="autorelaxed"></ins>
<script> 
(adsbygoogle = window.adsbygoogle || []).push({}); 
</script>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://knowledge.reontosanta.com/archives/487/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">487</post-id>	</item>
	</channel>
</rss>
