[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/24 12:05 / Filesize : 170 KB / Number-of Response : 736
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【node.js】サーバサイドjavascript【Rhino】



1 名前:デフォルトの名無しさん mailto:sage [2011/07/08(金) 10:12:15.70 ]
pythonやrubyやPHPと同じ土俵でjavascriptが使えるようになりました。
サーバサイドjavascriptについて語りましょう。

javascriptはrubyと比較してもかなり速い
shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=v8&lang2=yarv

Rhino - JVM上で実行できる処理系
https://developer.mozilla.org/ja/Rhino

node.js - googleが開発したV8エンジン上で実行できる処理系
nodejs.org/

513 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:34:27.70 ]
node.exe 環境での package.json についてだけど
"main" : "C:\hoge\hoge.js" だと動かなくて
"main" : "C:/hoge/hoge.js" だとちゃんと読んでくれるみたい

ちょっとハマった

// node.exe v0.7.5

514 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 22:39:51.33 ]
知らんけど、"C:\\hoge\\hoge.js" じゃないの?

515 名前:デフォルトの名無しさん [2012/02/26(日) 23:11:20.06 ]
cluster.setupMaster()で起動するワーカーのソースに他のファイルを指定できるのはわかったがなぜか一回設定すると変更できない


ひとつのプログラムでcluster化したい場所が二ヶ所以上あるとつかえないのかな?

こうなるとwebworkerが使いたい...

516 名前:デフォルトの名無しさん [2012/02/26(日) 23:18:02.41 ]
a = require("cluster");
console.log(a.settings());            --->{ exec: '', args: [], silent: false }
a.setupMaster({exec:"./app.js"});
console.log(a.settings());            --->{ exec: './app.js', args: [], silent: false }
a.setupMaster({exec:"./app2.js"});
console.log(a.settings());            --->{ exec: './app.js', args: [], silent: false }       ←なんでapp2.jsじゃないんだよ( ̄_ ̄#)

b = require("cluster");
console.log(b.settings());            --->{ exec: './app.js', args: [], silent: false }       ←なんでapp.jsが入ってんだよ( ̄_ ̄#)


console.log(require("cluster").settings());            --->{ exec: './app.js', args: [], silent: false }

要するにrequire("cluster")で一回、値を設定すると変更できないみたいだ
webworker使いたい......

517 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 00:18:30.12 ]
clusterのソース読めば良いよ
あれ結局はforkしてるだけだし


518 名前:513 mailto:sage [2012/02/27(月) 00:49:09.66 ]
>>514
確認したら大丈夫でした
っていうかそっちのが正当かも

519 名前:デフォルトの名無しさん [2012/02/27(月) 02:01:54.48 ]
>>517 すみません
clusterのソースってどこにあるんでしょう...?ポリ…σ(-''-;)

520 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 02:15:44.39 ]
>>517 じゃないけど,これじゃないですかね
https://github.com/joyent/node/blob/master/lib/cluster.js

ローカルから探すなら
$ find / -name cluster.js

でしょうか

521 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 07:40:45.36 ]
Webアプリ開発は Linux + Mono + ASP.NET MVC が最強だと悟った
engawa.2ch.net/test/read.cgi/poverty/1330244837/



522 名前:デフォルトの名無しさん [2012/02/27(月) 14:15:15.92 ]
結局clusterモジュールを>>516で満足のいくように書き換えることにした

ちょっとかかりそうだな

523 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 15:31:15.90 ]
ちょっとかかりそうだね

524 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 15:32:16.66 ]
ちょっとかかるかもね

525 名前:デフォルトの名無しさん [2012/02/28(火) 00:16:19.71 ]
とりあえずcluster書き換えて使えるようになった
どうもcluster.settingsは二回以上書き換えるといろいろとおかしくなるみたい
んじゃa = require("cluster");    b = require("cluster");みたいなかんじで何回もモジュールをロードしたらいいのではないか
→なんかrequire("cluster")はこれ単体で動いてるみたいやから、aとかbに代入してもコピーされるのではなくaやbがrequire("cluster")のポインタになるだけで意味がなかった
→require("cluster")を作る関数を返すモジュールを作った

//    ./cluster.js
module.exports = function(){
clusterほにゃらら
returen cluster;}

でa = require("./cluster.js")();
これでa,b,c...ってつくってくとclusterの部分がa,b,cにコピーされるから別もんとしてつかえる

あとは別のファイルから動いてるマスターとワーカーをどうやって通信させるか かな

526 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 01:33:24.79 ]
スレ違いかもしれないけど、Aptanaとかでexpressのコード補完とか出来ないのかな
出来れば凄く便利になるんだけど・・・

527 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 06:37:58.61 ]
言い出しっぺの>>526がエクステンション作ってくれるらしい
拍手!

528 名前:デフォルトの名無しさん [2012/02/28(火) 15:00:48.28 ]
vim + neocmplcacheでいいんじゃね

529 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 15:11:21.51 ]
>>528
☆−(ノ゜Д゜)八(゜Д゜ )ノイエーイ☆

530 名前:デフォルトの名無しさん [2012/02/28(火) 18:52:00.89 ]
>>529
(゜∀゜)人(゜∀゜)ナカーマ

531 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 09:06:07.13 ]
ServletやStrutsのような使い心地のフレームワーク作成ちう



532 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 09:14:44.60 ]
それあかんやつや

533 名前:デフォルトの名無しさん [2012/03/02(金) 18:11:10.92 ]
>>531
wktk

534 名前:デフォルトの名無しさん [2012/03/02(金) 23:27:36.26 ]
やっぱ例外処理がネックだね。
キャッチされない例外処理と、レスポンスを結び付けるのが難しい。

vm.createScript/createContext/runInContextを組み合わせて、
リクエストをそれぞれ別々のコンテキストで実行する方法なら、
何とかならない訳ではないが、メモリとパフォーマンスの問題あり。

因みに、その方法はError.prototypeをコンテキスト単位で拡張しておく。
するとprocessでキャッチされない例外を受け取った時に、
例外オブジェクトが拡張された状態になってる。
そこに事前にレスポンスを結び付けるという方法。

535 名前:デフォルトの名無しさん [2012/03/02(金) 23:36:21.26 ]
例外処理は、Greeがnode-greeという独自モジュールで、
非同期処理をtry/catch出来るようにしているらしい。

node-fiberをみると、ネイティブ拡張で、関数の実行を途中で止めて、他の関数に制御を渡すというのをやってる。
原理は同じなんだろうね。

キャッチ漏れ対策はどうしたもんか。。。

536 名前:デフォルトの名無しさん [2012/03/03(土) 00:32:26.46 ]
expressってやっぱいいの?

537 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 07:59:36.91 ]
expressはrubyでいうとRailsにもSinatraにもなれる素敵フレームワークだからな
一部例外除いてnode製のwaf名乗ってる奴、だいたいexpressのDSLだし
zappaとかaceとかtower.jsとかmatadorとか

expressの使い方わかってれば、以上のライブラリ好きに拡張できるよ

538 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 12:52:44.53 ]
ただ、expressはrailsやsinatraと同じで
今は流行ってるが一時的ですぐ廃れそうなんだよな。

539 名前:デフォルトの名無しさん [2012/03/03(土) 18:48:59.77 ]
なにも流行ってるものを使わなきゃいけないわけないだろ

自分が使いたいものを使えばいい


それ言うならnodeじゃなくてもっと流行ってるPHP使えよ

540 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 18:54:57.54 ]
PHPよりもJavaの方が流行ってる。

541 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 19:04:42.96 ]
マジレスで、今の流行りはPython



542 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 19:20:09.81 ]
ttp://www.tiobe.com/index.php/content/paperinfo/tpci/
Python今はもう明らかに落ち目だぞ

543 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 19:29:19.30 ]
Javaって流行っているのか?

簡単なものを作るのには、expressは便利だよ

544 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 19:38:45.63 ]
JSの事をJavaと呼んでるんだろう

545 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 19:49:01.38 ]
それはお前だけだろw

546 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 20:42:49.04 ]
なんでわざわざJSと書いてるのに
俺がJavaと呼んでる事になってるの?
頭大丈夫?


547 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:02:25.32 ]
昔そういう勘違いして馬鹿にされて
それが今もトラウマになってるんだろw

548 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:21:34.86 ]
ただ煽りたいだけの頭痛い子か

549 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:23:09.37 ]
最初に煽ってきたのは>>544だけどなw

550 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 14:33:19.64 ]
接続中のクライアントをサーバ側でランダムにマッチングするようなことはできますか?
Node.jsはシングルスレッドのため、別スレッドで検索しつつ見つかったら〜みたいなこと
出来ない気がするので・・・。

わかる方いらっしゃいましたら教えて頂ければと思います。



551 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 15:05:35.26 ]
なんでnode.jsっていうんですか?正式名称はnodeじゃないんですか?



552 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 15:12:13.56 ]
>>550
イベントループでもマルチスレッドっぽい事は出来る。


553 名前:デフォルトの名無しさん [2012/03/04(日) 16:32:45.86 ]
今のバージョンってCygwinに入らないのか。
./configureでCygwinはサポートしてないぜって怒られる。

単純にfibers使いたいだけなんだけど、
Windowsサポートされてないし、
かと言ってLinux環境作るのが面倒い。


554 名前:デフォルトの名無しさん [2012/03/04(日) 16:34:41.52 ]
Windowsサポートしてるだろ

555 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 17:16:00.80 ]
書いたとおり、fibersというモジュールは、
Windowsに対応していないんだ。
ソースみるとpthreadとか依存しまくりだし、
作者も公式で、対応出来るけどヤラネと言ってる。。。

556 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 21:30:41.58 ]
cygwinかmingwでモジュールだけコンパイルしたり
sourceware.org/pthreads-win32/faq.html のラッパー書くより、
vmplayerにubuntu serverインストールする方が早い気がするよ。

作業中いつでもネットワーク環境あるならsaasでも
www.goodpic.com/mt/archives2/2011/07/websaas_paas_ia.html


557 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 22:03:39.58 ]
ビルドについて、node本体かfibersについてか分からんけど
https://github.com/laverdet/node-fibers/tree/master/src
これのことなら、単純にMakefileとplatform.mkに追加すればいんじゃない?

558 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 22:20:49.96 ]
cygwin上でのビルドで怒られるのは、node.js本体で0.6系。
fibersは試してないけど、cygwinならいけそうな気がする。


559 名前:デフォルトの名無しさん [2012/03/04(日) 22:30:25.04 ]
>>550
何をしたいのかがよくわからんけどclusterで行けると思う

おれはclusterでgizmodeのページを監視させて、更新されたらクライアントに通知がいくようなもん作った

560 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 00:25:13.96 ]
>>552
ありがとうございます。
試してみます。

561 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 00:32:41.44 ]
>>559
せめてもう少しましなサイトを…



562 名前:デフォルトの名無しさん [2012/03/05(月) 18:55:40.43 ]
node.jsとC言語で実行時間比べてみたらほぼ同じ速さだったんだがスクリプト言語でここまで速くなるもんなのか。

空ループと乱数発生させるだけのループしか試してないけど複雑な処理だと差が開くのかな。

563 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 19:07:00.49 ]
ヒント:JIT

564 名前:デフォルトの名無しさん [2012/03/05(月) 19:24:08.05 ]
v8は内部で部分的にコンパイルしてるからスクリプト言語でも速い

565 名前:デフォルトの名無しさん [2012/03/05(月) 19:55:51.51 ]
いくらJITコンパイルしてるからってC言語と並ぶとは思わなかった。Cでモジュール書くことも出来るけどほとんど必要なさそうだな。

566 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 20:03:50.52 ]
どっちかというと、ネイティブじゃなきゃできない事とか、
ネイティブのライブラリを呼び出すとか、
そういう用途がいいんじゃないかな。

あと、大量データを一括で渡して計算結果をもらうとか。
GPGPUなんかは計算だけならCよりも更に速いので、
そういうのを呼び出す用途もいける。

V8の特性はよくわからないけど、
ネイティブ呼び出しのオーバーヘッドって、
それなりに高いと思うんだ。
それを考慮したベンチをとったのかな?

567 名前:デフォルトの名無しさん [2012/03/05(月) 20:46:49.07 ]
>>566
なるほど、詳しくありがとう。
JSじゃ出来ないことをするにはモジュール必須だね。

オーバーヘッドについては気になったからMath.floor(Math.random()*10000000);とかのループも試したけどCと同等だった。
一度呼んだ関数はキャッシュされてるのかもしれないが。

568 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 21:48:40.81 ]
> 空ループと乱数発生させるだけのループしか試してないけど複雑な処理だと差が開くのかな。

それだとコンパイルしたら、コードなくなるんじゃね?


569 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 22:24:26.28 ]
もうちょっとヘビーな処理の方がいいかも。
ネイティブ呼び出しのオーバーヘッドが、無視できるレベルのヘビーなベンチなら、
恐らくCの方が速いと思われ。

ネイティブコードはコンパイル時の静的な最適化で、
JITは実行時のメトリクスに合わせた動的な最適化だから、
ケース次第ではJITの方が速い場合もあるけど。

570 名前:デフォルトの名無しさん mailto:sage [2012/03/05(月) 23:18:10.86 ]
かなり重い処理させるとCのほうが速いね。それでもnode.jsの1.1倍くらいだが。

571 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 00:21:11.57 ]
node.jsが異常に速いのはここでも実証されてる
www.slideshare.net/kwatch/ss-8933694



572 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 00:28:50.91 ]
V8だけ無駄に評価されすぎじゃね?
たまにはSpiderMonkeyも思い出してあげてください・・・

573 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 05:01:48.98 ]
文字列連結ってブラウザのJSではかなり多い処理なんで、
それに特化したチューニングをしてるとは思われる。

何かのベンチではV8よりも、IonMonkeyだかJaegerMonkeyの方が、
若干速いという記事を見た覚えがある。
AS3/AVM2もケースにおいてはV8よりも速いみたいだし。

処理によって速い遅いというのは、チューニングの特性が大きいのかもしれない。

574 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 10:21:42.36 ]
JSは文字列を扱う機会が多いわりに遅いってイメージ。
でも、V8とかはそんなに速いのか。node.js使ってみようかな。

575 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 14:26:00.43 ]
node.jsで子プロセス作ってそこから親プロセスのメモリにアクセスすることって出来ますか?

576 名前:デフォルトの名無しさん [2012/03/06(火) 18:33:47.11 ]
親と子のデータのやり取りはできるけどメモリにアクセスできるかはわからない

577 名前:デフォルトの名無しさん mailto:sage [2012/03/06(火) 19:44:40.63 ]
共有メモリは無理かな

578 名前:デフォルトの名無しさん [2012/03/06(火) 19:59:43.06 ]
なんか行けそうな気がするけど

579 名前:デフォルトの名無しさん [2012/03/07(水) 01:19:06.32 ]
みんなnodejsでどんなもん作ってる?

580 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 07:01:23.74 ]
node.jsで何か作るためのライブラリ。
メタ開発面白いお。

581 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 10:44:27.44 ]
V8はC++で作られててC++のランタイムをどうのこうのって書いてあった



582 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 12:46:30.84 ]
node.jsでJavaVM作ってその上でRhino動かそうぜ

583 名前:デフォルトの名無しさん [2012/03/07(水) 15:17:15.51 ]
>>582
渋いな


584 名前: 忍法帖【Lv=32,xxxPT】 [2012/03/07(水) 15:20:10.22 ]
できるもんなのか...?

585 名前:デフォルトの名無しさん [2012/03/07(水) 15:38:38.56 ]
mysql使っているところで例外を throw すると、app.get() の中で 拾えない。。これって何故だか分かりますか?(24歳 会社員)
var mysql = require( "mysql" );
var db = mysql.createClient( conf.mysql );
function getAccounts() {
var sql = "SELECT * FROM accounts ";
db.query( sql, [], function( err, results, fields ) {
throw err;
});
}
app.get( "/hoge", function( req, res ) {
console.log( "start" );
try {
getAccounts();
} catch ( e ) {
console.log( "catch error " + e );
}
console.log( "end" );
res.render( "hoge" );
});
-------------------------------------------
start
end
/home/user/work/node.js/app/server.js:296
throw err;
^
null

586 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 17:10:28.76 ]
それって
process.on('uncaughtException',function (e) {});
とかでもとれないやつ?


587 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 23:34:26.29 ]
query関数の引数のコールバックは非同期だから、
getAccountをtry catchで括っても無駄。

588 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 01:28:17.05 ]
PHPとnode.jsのセッション情報共有って出来ますか?


589 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 02:21:35.70 ]
>>588
どうやって共有するかによる。
PHPは独自のシリアライズ方式で値を保存、復元している。
node.jsには標準がないので、PHPのシリアライズされたデータの、
エンコーダーとデコーダーを作るのが手っ取り早い。

と思ったら、npmにnodePhpSessionsというのがあるわw
見てないけど、多分上記の様なことやってくれそう。
レポよろしく。

590 名前:585 [2012/03/08(木) 12:19:26.92 ]
やっぱそうなのか、、dbに接続したらダメになってたから、そうかなーって思ってたけど、、
つらい。。
トランザクションを利用したくて、なんかいい方法ありますか??

ひたすらコールバックに渡していく方法だと、コードが入れ子になりすぎて汚くなるから、

function doChain( this_, fn ) {
if ( typeof fn == "function" ) {
this_.data.chain.push( fn );
}
this_.data.chain.shift()( this_ );
}

function func1( this_ ) {
console.log( "func1" );
throw "error";
this_.data.chain.shift()( this_ );
}
function func2( this_ ) {
console.log( "func2" );
this_.data.chain.shift()( this_ );
}

function begin( this_ ) {
console.log( "begin" );
this_.data.chain.shift()( this_ );
}

591 名前:デフォルトの名無しさん [2012/03/08(木) 12:19:59.37 ]
function commit( this_ ) {
console.log( "commit" );
}
function rollback( fn ) {
console.log( "rollback" );
fn();
}

app.get( "/hoge", function( req, res ) {
try {
this.data = [];
this.data.chain = [ func1, func2 ];
console.log( "start" );
dodata.chain( this, function() {
console.log( "end" );
});
} catch ( e ) {
console.log( "catch error" );
rollback(function(){
console.log( "rollback 2" );
});
}
});
こういう風にしてるけど、何か try-catch + コードが汚くならない方法ありますか、、



592 名前:デフォルトの名無しさん [2012/03/08(木) 12:38:59.71 ]
uncaughtException で取れたので

// 追加
process.on( "uncaughtException", function( err ){
console.log( "uncaughtException => " + err );
});
// 追加
function TransactionFaild( app ) {
console.log( "transaction faild" );
rollback(function() {
app.data.res.render( "error/transaction_faild" );
});
}

function func1( this_ ) {
console.log( "func1" );
throw new TransactionFaild( this_ ); // 修正
this_.data.chain.shift()( this_ );
}

app.get( "/hoge", function( req, res ) {
try {
this.data = [];
this.data.req = req; // 追加
this.data.res = res; // 追加
this.data.chain = [ func1, func2 ];
... (省略)
});

としたのですが、err/transaction?_faild のテンプレートが表示されません。
使っているのは express と ejs なのですが、何ででしょうか。。
※ 書いていて思ったのですが this_ より app の方がいいですね。

593 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 22:35:20.71 ]
redtamarinにnode.jsくらいの基本ライブラリがあって、
ネイティブ拡張がやり易いなら、結構普及するんだろうな。



594 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 23:11:59.60 ]
>>589
ありがとう!
試したらレポしますね!

595 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 23:27:21.42 ]
>>594
スキル不足でSoket.IOと紐付け出来ませんでした\(^o^)/


596 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 16:09:44.25 ]
ttp://d.hatena.ne.jp/Jxck/20110809/1312847290
このサイトを参考にCookie受信を試しているのですが、
IE8では上手くCookie受信出来るのですが、
Firefox10.0.2では上手くいきません

Firefoxでは何か制限があるのでしょうか?


597 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 00:38:09.60 ]
Tower.js使ってみた人いる?

598 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 14:05:25.86 ]
とりあえずscaffold使ってみたりした
基本的には mongoose, express, coffeekup でラッパ作ってMVCならこうなりますって感じ
Railsに準じた構成でコードが吐かれる。俺はRailsわからんので此処から先はRails詳しい人お願い

599 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 21:00:37.34 ]
node.jsってJavascript知らないと使えないの?

600 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 21:52:57.47 ]
そりゃまあ

601 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 23:02:20.42 ]
あんまりガチガチじゃないMVCフレームワーク作ってる。

・正規表現で、動的にコントローラを結び付けられる
・ソースやリソースなどは、更新されると自動読み直し
・決めたwebappディレクトリをルートとしたリソース管理
・正規表現で定義でき、複数のフィルタを連続して実行できるリクエストフィルタ
・静的コンテンツのサポート、エラーページのサポート
・リダイレクト、ディスパッチのサポート
・複数のテンプレートエンジンの使い分け

基本的には極力余計なことはしないので、POSTパラメータの処理などは標準ではサポートしない。
でもそれだと不便なので、POSTパラメータやアップロードされたファイルを、
フィルタでリクエストオブジェクトに設定できるようにしている。

ファイルアップロードとかPOSTパラメータ、クッキーなどの処理は、
基本的には実績のあるサードパティのモジュールを使う感じ。
フレームワークに適用できるようにするための、アダプタだけ用意する感じかな。

module.exports = function(context){
  var model = context.require("models/foo");
  model.doLogic(xxx, xxx, function(err, result){
    if(err){
      context.error(err);
    }else{
      context.render("ejs:foo/bar", result);
    }
  });
};

という感じでコントローラが書ける。ExpressとかTowerとかの今風のMVCではなく、
どっちかというと、ZendとかStrutsな感じのMVCだけど、こういうのってニーズあるのかな?




602 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 23:21:22.47 ]
・決めたwebappディレクトリをルートとしたリソース管理

ってなんぞ?

603 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 23:34:58.06 ]
サーブレットでいう、WEB-INFディレクトリのようなもの。

特定のディレクトリ以下をWEBアプリのディレクトリとして、
そのディレクトリ以下のリソースを自動的に読みなおしたりキャッシュしたり、
パスの解決もそのディレクトリからの相対パスとなる感じ。

node-devだと監視対象になるし、アプリ全体が再起動しちゃうんだけど、
どっちかというと、本番稼動時にコントローラをホットスワップするためのもの。
サブディレクトリ足して、コントローラ置いて、アプリの設定にするというのもOK。

、、、という感じです。

ディレクトリを固定するのは、アプリ内でのパスの単純化と、
監視コストの削減ってところですかね。


604 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 08:03:00.75 ]
>>601
凄いなw
blog晒してw

605 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 08:52:45.35 ]
>>604
ないから作るかなw

ソースもDropbox上のSVNリポジトリに置いてるだけだし、
alpha版出来たらGithubとnpmにあげるかな。。

606 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 13:24:56.34 ]
最初からgithubで開発すりゃいいのに

607 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 13:44:21.90 ]
>>605
むしろgithubをNodeで作ってくれw

608 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 17:19:57.76 ]
恥ずかしいソースを晒したくない

609 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 17:21:02.45 ]
オープンソースは自分のケツ穴を衆目に晒すようなもんだ。
よっぽど美しいケツ穴かナルシストでなければ自信なんて持てるはずがない。

610 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 17:44:13.88 ]
       ∧∧
       (д`* )
       (⊃⌒*⌒⊂)
        /__ノωヽ__)

611 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 21:54:51.50 ]
>>596
Socket.IOのバージョンを 0.9.1-1 にアップデートしたらFirefoxでも動作しました。
お騒がせしました。



612 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 22:49:05.29 ]
Node.jsやるんだったらGithubは必須というのは重々に承知してる。
でもSVNになれると、なかなか馴染めないんだよね。

前はGoogleCodeでソース管理してたんだけど、
リポジトリの同期が遅いし公開が目的ではないので、
DropboxとSVNの方が速いし気軽だね。

でも完全にGithubに移行しようかな。

613 名前:デフォルトの名無しさん mailto:sage [2012/03/15(木) 10:26:37.52 ]
>>609
それは違うと思うな
ブサイクなアイドルなりたてが美人なアイドルになる過程の方が似てる

色な人に見られる事を意識し使われればより良いコードになっていく
それがまた自分の糧にもなる







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<170KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef