Node.jsは現在、オタクのブログで多くのコラムインチを取得しているようです。少しの宿題があれば、その理由を理解するのは難しくありません。
学習ノードに飛び込む前に知っておくとよいことは何ですか?私はJavascriptを想定していますが、他に役立つテクノロジーや概念はありますか?ローカルテストから本番サーバーに移行するには、何を知っておく必要がありますか?
Node.jsは現在、オタクのブログで多くのコラムインチを取得しているようです。少しの宿題があれば、その理由を理解するのは難しくありません。
学習ノードに飛び込む前に知っておくとよいことは何ですか?私はJavascriptを想定していますが、他に役立つテクノロジーや概念はありますか?ローカルテストから本番サーバーに移行するには、何を知っておく必要がありますか?
Node.js はイベント ドリブン システムであるため、作成するコードの多くは非同期になります。これは、次のようなコードを頻繁に書くことができないことを意味します
if( something() )
{
somethingElse();
}
次のようなことをする必要があります
something(function(result){
if(result){
somethingElse();
}
})
( が非同期関数であると仮定しsomething()
ます。たとえば、結果を返さずに、処理が完了するとコールバック (無名関数) が結果とともに呼び出される関数)
これはContinuation Passing Style (CPS)として知られており、 Node.js を効果的に使用するために乗り越えなければならない最大のハードルの 1 つです。
CPS に関する別のより実用的な記事を次に示します: http://matt.might.net/articles/by-example-continuation-passing-style/
バニラのリクエスト/レスポンス Web アプリケーションを構築している場合、基本は次のようになります。
http サーバーの例は、ノードの世界では非常に一般的です。これは、php などの別の Web 言語とは異なり、ノード アプリケーションが Apache Web サーバーなどの「内部」に存在しないためです。リクエストに基づいてレスポンスを返す動作中の Web サーバーを実際に作成しています。これは、典型的な「html/php/その他のファイルをApacheのWebルートに貼り付ける」方法とは大きく異なるプログラムの編成方法です。ノードの強みは、web/tcp/udp/cli サーバーを作成すると、スレッド プール、イベント ループ、ロックなどの厄介なハード パーツの多くが矮小化されることです。
これらのことをより手動で処理する必要があるためです (少なくとも、モジュールを作成するか、モジュールを選択して処理するまでは)。私が電話でインタビューした多くの候補者は、典型的な言語がセッションストアをどのように処理するかという内部の仕組みを定義できません。彼らは、値 X を変数 Y に固定し、セッション中に使用できることを知っているだけです。実際には、セッション ID によってどこかにあるファイル/データベース/ストアを参照するように設定される Cookie があります。ノードでは、これらの値を自分で http ヘッダーから取得し (またはモジュールがそれを行います)、http のより基本的なビルディング ブロックの上に構築します。同じことが POST および GET データにも当てはまります。
そうは言っても、express のようなフレームワーク ( http://expressjs.com/ ) を使用して大きな効果を得ることができ、多くのことを処理してくれます。ただし、httpリクエストの内部で取得できるのはまだ十分に生です(ほとんどのノードスターが好む)。
ほとんどの Web アプリケーションは、何らかのデータベースを必要とします。mysql のようなリレーショナル データベースは、これを実現するための 1 つの方法です。多くのノーデスターは、mongodb のようなものを好みます。これは、スキーマ + 移行などの自由度が高くなり、JavaScript の感覚が少し増すためです (物事が JSON のように見えるため)。幸いなことに、コミュニティには共通データベース用の非常に多くのクライアント ライブラリがあるため、難しい選択を迅速に行う必要はありません。
他の人が言ったように、これはあなたの心をある程度吹き飛ばすことができるものです. 他の多くの言語では、python の twisted や ruby の eventmachine のような特定のノンブロッキング フレームワークを使用していない限り、ほとんどすべての場合で同期的なコードを記述しています。つまり、データベースに情報を求めるときは、次のようにします。
result = query("SELECT * FROM users");
console.log(results);
console.log("howdy");
代わりに、ノード (またはコールバック/イベント ベースの io をサポートする他のフレームワーク) では、次のようなコードを記述します。
query("SELECT * FROM users", function(result){
// Do something with your users
console.log(result);
});
console.log("howdy");
最初の例 (同期の世界から) では、'howdy' が結果の後に出力されます。2 番目の (非同期) 例では、結果の前に「howdy」が出力されます。
相互に依存する多くの同期操作を行う必要がある場合、これは注意が必要です。ここまで来たら、https://github.com/caolan/asyncなどのフロー制御ライブラリを調べてみましょう。これらのライブラリには、これらの操作を順序付けするためのツールが用意されているため、コードが途方もなくネストされているように見えません。
明らかにそれは幅広い質問です。個人的には、飛び込んですべてを回すべきだと思います。実際、このことを学ぶには良い方法です。
明らかに(あなたがすでに言ったように)言語としての JavaScript。JavaScript の優れたガイドとして、Eloquent Javascriptをお勧めします。
node.js は JavaScript を拡張して本格的なサーバー アプリケーションを作成できるようにするため、おそらくオブジェクト指向の手法に精通している必要があります。
これにより、コードを整理できます:-)