2014年04月02日

node.jsのurlモジュール

node.jsではURLの操作にはurlモジュールを利用する。

たとえばURLを取得して表示するには以下のようにする。

var http = require("http");
var url = require("url");

var server = http.createServer();
server.on("request",function(req,res){
var path = url.parse(req.url);
res.setHeader('Content-Type','text/plane');
res.write(path.pathname);
res.end();
}).listen(1234);


url.parse()で取得したオブジェクトはJavaScriptのLocationオブジェクトとおなじものが利用できる


タグ:URL node.js
posted by ねこまんま at 12:29 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

2014年03月21日

node.jsでWebSocket 1

node.jsでWebSocketを使ってみる。

利用するモジュールはWebSocket.IO。npm installを使ってインストール。

npm install websocket.io


server.jsとしてWebSocket用のJSを作成。

var ws = require("websocket.io"),
server = ws.listen(8888);

server.on('connection', function (socket) {
socket.on("message",function(data) {
server.clients.forEach(function(client) {
client.send(data)
});
});
socket.on('close', function () { });
});


コマンドラインから以下のコマンドを入力するとサーバーが起動します。

node server.js


クライントサイドではnew WebSocket(host)でWebSocketオブジェクトを作成し、WebSocket.onmessage()でメッセージ受信用の処理をWebSocket.send()でメッセージ送信用の処理を行う

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script>
$(function(){
var host = "ws://localhost:8888/",
ws = new WebSocket(host);
//データの受信
ws.onmessage = function(message){
$("ul").append("<li>"+message.data+"</li>")
}
//データの送信
$("#sendBtn").on("click",function(){
message = $("#message").val()
ws.send(message);
});
});
</script>
</head>
<body>
<input type="text" id="message" /><button id="sendBtn">send</button>
<ul>
</ul>
</body>
</html>


参考:Node.jsとWebSocket.IOでチャットアプリを作る | mawatari.jp
タグ:node.js WebSocket
posted by ねこまんま at 22:30 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

2014年03月01日

node.jsでファイルを作成

node.jsでファイルを作成するにはfsモジュールをを読み込みwriteFileメソッドを利用する。

var fs = require('fs');
var data = "fuga";
fs.writeFile("./hoge.txt", data , function (err) {
console.log(err);
});


このスクリプトでは「fuga」という内容のhoge.txtというファイルを作成しています。
posted by ねこまんま at 12:35 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

2013年04月23日

node.jsのsequelizeモジュール

Re:node.jsを使ってjQueryチックにWebサイトをクローリングする方法 その2で使ったsequelizeモジュールについての覚書。

まずはDB接続テーブル定義。

var sequelize = require("sequelize")
var connection = new sequelize('node_test', 'root', 'pass');
var Sites = connection.define('sites', {
url: sequelize.TEXT,
title: sequelize.STRING
});


これでnode_test DBのSitesテーブルのオブジェクトができます。

SELECT文は次のようにfindAll()を利用する

Sites.findAll().success(function(data) {
for (var i = 0; i < data.length; i++){
console.log(data[i].title);
}
});


挿入(Insert)

次のように記述するとデータのインサートができる。。。と思いきやできない。

var site = new Sites({
url: 'http://hoge.net',
title:'hoge.net'
});
site.save()
.success(function() {
console.log('ok');
})
.error(function(error) {
console.log(error);
});


バージョンの問題?次のように変更したらインサートできました。

var site = Sites.build({
url: 'http://hoge.net',
title:'hoge.net'
});
site.save()
.success(function() {
console.log('ok');
})
.error(function(error) {
console.log(error);
});


途中で文法が変わったのかな。。。オフィシャルのドキュメントも微妙だし、ぐぐっても出てこないし色々と辛い
posted by ねこまんま at 19:09 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

node.jsのcheerioモジュール

Re:node.jsを使ってjQueryチックにWebサイトをクローリングする方法 その2で使ったcheerioモジュールについての覚書。

 $ = cheerio.load(body);


みたいにHTMLを指定するとjQueryと同じような記法でDOMノードの取得ができる。

以下はrequestモジュールによりHTMLを取得したサイトのタイトルを取得するスクリプト。

var request = require('request');
var cheerio = require("cheerio");

request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
$ = cheerio.load(body);
var title = $("title").text();
console.log(title);//google
}
})
タグ:CHEERIO node.js
posted by ねこまんま at 15:39 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

node.jsのrequestモジュール

Re:node.jsを使ってjQueryチックにWebサイトをクローリングする方法 その2で使ったrequestモジュールについての覚書。

第1引数にリクエストの先のURL、第2引数にコールバック関数を定義。コールバック関数ではerror、response、bodyの引数が利用できる。

var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Print the google web page.
}
})
タグ:node.js request
posted by ねこまんま at 12:06 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

Re:node.jsを使ってjQueryチックにWebサイトをクローリングする方法 その2

ちょっと時間があいたけどRe:node.jsを使ってjQueryチックにWebサイトをクローリングする方法: JavaScriptメモの続き。

sequelizeのdefineメソッドでーブルを定義します。

// Define models
var sites = connection.define('sites', {
url: sequelize.TEXT,
title: sequelize.STRING
});


初回のみ実行するsync()。これで先ほど定義したテーブルを自動生成してくれます。

// Synchronize to database
connection.sync({force: true});


DB接続できたので、次はスプレーピング用のしょり。通信用にrequestモジュールと取得したHTMLのDOMパーサー用にcheerioをrequireしときます。

//Initialize instance
var request = require("request");
var cheerio = require("cheerio");


で、以下がメインの処理。これはちょっと各項目づつあとで掘り下げて解説します。

// Define request url
var requestUrl = "http://www.google.com";

// Send http request
request({url: requestUrl}, function(error, response, body) {

// If request succeed
if (!error && response.statusCode == 200) {
$ = cheerio.load(body); // Create cheerio instance

// Get response data
var url = response.request.href;
var title = $("title").text();

console.log(url);
console.log(title);

// Create new instance
var site = sites.build();

// Set fields
site.url = url;
site.title = title;

// Save to database
site.save()
.success(function(anotherTask) {
console.log('Succeed');
})
.error(function(error) {
console.log(error);
});
}

// If error occured
else {
console.log("--------------------------------------------------");
if (error && "code" in error) {
console.log("Error Code:" + error.code);
}
if (error && "errno" in error) {
console.log("Error No:" + error.errno);
}
if (error && "syscall" in error) {
console.log("Error Syscall:" + error.syscall);
}
if (response && "statusCode" in response) {
console.log("Status Code:" + response.statusCode);
}
}
});
タグ:node.js
posted by ねこまんま at 11:56 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

2013年02月05日

Re:node.jsを使ってjQueryチックにWebサイトをクローリングする方法

ネタ元:node.jsを使ってjQueryチックにWebサイトをクローリングする方法

よい感じの記事なので写経してみます。

まずはモジュールのインストール。

「request」はHTMLでスクレイピング対象のURLのデータを取ってくるライブラリ
「mysql」はデータをMySQLにぶち込むためのライブラリ
「sequelize」はO/Rマッパーライブラリ
「cheerio」は取ってきたデータをjQueryチックにDOMのセレクタでいじいじするためのライブラリ

npm install request
npm install mysql
npm install sequelize
npm install cheerio


次のコマンドでインストールされているモジュールの一覧が確認できます。

npm list


sequelizeでO/Rマッパーを利用します。

var sequelize = require('sequelize');
var connection = new sequelize('データベース名', 'ユーザ名', 'パスワード', {オプション: '値'});


mysqlインストールの為、次回につづく
posted by ねこまんま at 02:50 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

2013年02月04日

node.jsでExpress -routes-

node.jsのフレームワークExpressでルーティングを行って見ましょう。

前回設定したExpressのディレクトリのapp.jsに次の構文を追加します。

app.get('/foo/:id', routes.sample);


routesディレクトリのindex.jsに次のスクリプトを追加

exports.sample = function(req,res){
var id = req.param('id');
res.send(id,{'Content-Type':'text/plain'},200)
}


http://localhost:3000/foo/barなどにアクセスするとルーティングされfooと表示されます。
タグ:node.js Routes
posted by ねこまんま at 03:32 | Comment(1) | TrackBack(0) | node.js | 更新情報をチェックする

node.jsのExpress

node.jsにはExpressというフレームワークが存在します。

Expressはnpmを利用してインストールします。

sudo npm install -g express


インストールされれば以下のように表示されます。-gはグローバルオプションでこのオプションをつけることでexpressをグローバルコマンドとして利用できます。」

/usr/local/bin/express -> /usr/local/lib/node_modules/express/bin/express
express@3.1.0 /usr/local/lib/node_modules/express
├── methods@0.0.1
├── fresh@0.1.0
├── cookie-signature@0.0.1
├── range-parser@0.0.4
├── buffer-crc32@0.1.1
├── cookie@0.0.5
├── commander@0.6.1
├── debug@0.7.0
├── mkdirp@0.3.3
├── send@0.1.0 (mime@1.2.6)
└── connect@2.7.2 (pause@0.0.1, bytes@0.1.0, formidable@1.0.11, qs@0.5.1)


では、実際につかってみましょう。

cd ~/Desktop/
sudo express express_sample


と入力するとデスクトップにExpressのファイル一覧が生成されます。

create : express_sample
create : express_sample/package.json
create : express_sample/app.js
create : express_sample/public
create : express_sample/public/javascripts
create : express_sample/public/images
create : express_sample/public/stylesheets
create : express_sample/public/stylesheets/style.css
create : express_sample/routes
create : express_sample/routes/index.js
create : express_sample/routes/user.js
create : express_sample/views
create : express_sample/views/layout.jade
create : express_sample/views/index.jade

install dependencies:
$ cd express_sample && npm install

run the app:
$ node app


次に生成したディレクトリに移動し、モジュールをインストールします。

cd express_sample
npm install


Expressを実行します。

sudo node app.js


これでExpressが起動します。
タグ:node.js NPM
posted by ねこまんま at 01:13 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

2013年02月02日

node.jsでexportsを利用し外部モジュールと連携

node.jsでexportsを利用し外部モジュールと連携する方法。各モジュールには名前空間があり基本的にモジュール間で情報が共有できない。連携にはいくつか方法があるがその1つがexportsの利用

var sample = require("./hoge.js");
sample.setProperty("aa","bb");
sample.setProperty("cc","dd");
sample.print();


hoge.jsには以下のような内容を記述しておく

var properties = {}
exports.setProperty = function(name,value){
properties[name] = value;
}
exports.print = function(){
console.log(properties);
}
タグ:node.js EXPORTS
posted by ねこまんま at 23:30 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

Facebookのgraph APIにnode.jsでアクセス

Facebookのgraph APIにnode.jsでアクセスする方法

var http = require('http');
http.get({
host : "graph.facebook.com",
port:80,
path:'/zuck'
},function(response){
response.setEncoding("utf-8");
response.on("data",function(chunk){
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
chunk = JSON.parse(chunk);
for(var key in chunk){
response.write(key+":"+chunk[key]+'\n');
}
response.end();
}).listen(8124);
})
}).on("error",function(e){
console.log("ERROR",e.message);
});


httpモジュールのgetメソッドで外部APIの情報を取得できる。setEncodingでエンコーディングを設定できて、response.on("data",function(chunk){...})がよくわからないけど、バッファやチャンクを受信した際に発火するイベントっぽい。JSONのパースはJavaScriptと一緒でJSON.parseを利用

posted by ねこまんま at 14:16 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

2013年02月01日

node.jsの持続的接続を理解する

node.jsの持続的接続を理解できてなかったのでメモ。

次のコードを実行するとブラウザをリロードする度に2づつカウントアップされる。

var http = require('http');
var i=0;
var server = http.createServer(function (request, response) {
i++;
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write(i+'\n');
response.end();
}).listen(8124);


つまり、1度プロセスとその内容はプロセスが破棄されるまで保持されている。(ブラウザがfavicon.icoにもアクセスするため2づつカウントアップ)

PHPのようにhttpリクエスト毎にプロセスが走るのではないので注意が必要。
タグ:node.js
posted by ねこまんま at 15:14 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

node.jsでファイルを取得して内容を表示

node.jsでファイルを取得して内容を表示する。fsモジュールはファイルの読み書きができるモジュールです。

次のサンプルはreadFileメソッドで「hello.txt」の内容を取得しhttpモジュールで内容をブラウザに出力しています。

var fs = require("fs");
var http = require('http');
fs.readFile("./hello.txt",'utf-8',function(error,data){
if(error){
return console.log(error);
}else{
var server = http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write(data+'\n');
response.end();
}).listen(8124);
}
});
タグ:node.js
posted by ねこまんま at 14:28 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

node.jsでHello World!!

node.jsでHello World!!

適当な所に以下のファイルを保存

var sys = require('sys');
var http = require('http');

var server = http.createServer(
function (request, response) {

response.writeHead(200, {'Content-Type': 'text/plain'});
response.write('Hello World!!\n');
response.end();
}
).listen(8124);

sys.log('Server running at http://127.0.0.1:8124/');


ターミナルから以下のコマンドを実行

node hello.js


次のようなメッセージが表示される。

 Server running at http://127.0.0.1:8124/


ブラウザでhttp://127.0.0.1:8124/を確認するとちゃんとHello World!!が表示されるめでたし。

説明。

var sys = require('sys');
(中略)
sys.log('Server running at http://127.0.0.1:8124/');


sysモジュールを呼び出してターミナル上にログを出力してます。

var http = require('http');
var server = http.createServer(
(中略)
).listen(8124);


httpモジュールを呼び出してcreateServerでサーバーをポート番号8124で起動してます。

サーバー内ではresponseを出力してます。

 function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write('Hello World!!\n');
response.end();
}


たぶんこんな感じ

--

また、Hello Worldだけなら

console.log("Hello World");


でもHello Worldできる。
タグ:node.js
posted by ねこまんま at 00:46 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする

2010年11月23日

node.jsメモ

とりあえず試してみた。

node.jsのインストール

とりあえずインストールしてみる。

# cd /usr/local/src
# wget http://nodejs.org/dist/node-v0.2.5.tar.gz
# tar xzvf node-v0.2.5.tar.gz
# cd node-v0.2.5
# ./configure


実行。

Checking for program g++ or c++          : not found
Checking for program icpc : not found
Checking for program c++ : not found
/usr/local/src/node-v0.2.5/wscript:138: error: could not configure a cxx compiler!


C++のコンパイラがないと怒られる。

# yum update
# yum install gcc-c++y
# ./configure


インストールして実行

Checking for openssl                     : not found 
Checking for function SSL_library_init : not found
Checking for header openssl/crypto.h : not found
/usr/local/src/node-v0.2.5/wscript:193: error: Could not autodetect OpenSSL support. Make sure OpenSSL development packages are installed. Use configure --without-ssl to disable this message.


OpenSSLがないと怒られる

# yum install openssl-devel
# ./configure


インストールして実行!今度は成功

# make
# make install


インストール。終了。

# vi example.js


とりあえずサンプルファイル作ってみる。

var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');


# node example.js
Server running at http://127.0.0.1:8124/



ブラウザでhttp://127.0.0.1:8124/にアクセスすると『Hello World』と表示されれればOK

参考

node.js/0.1.28のインストール:
さくらの VPS に node.js + npm + Socket.IO をインストールする手順
ServersManのCentOS release 5.5にnode.jsをインストール
タグ:node.js
posted by ねこまんま at 23:39 | Comment(0) | TrackBack(0) | node.js | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。