ホームページ >ウェブフロントエンド >jsチュートリアル >node.js、git、およびマークダウンを使用してマイクロブログを構築します
node.js、git、およびマークダウンに基づいてマイクロブログを構築します
この記事では、node.js、git、およびいくつかの依存関係を使用してマイクロブログを構築する方法について説明します。このアプリは、リポジトリに提出されたファイルから静的コンテンツを提供するように設計されています。アプリケーションを構築およびテストする方法を学び、ソリューションを提供するプロセスに関する洞察を得ることができます。最終的には、構築できるミニマリストで実行可能なブログアプリケーションがあります。
素晴らしいブログを作成するには、まず第一に、いくつかのコンポーネントが必要です。
HTTPメッセージを送信するためのライブラリ
ブログ投稿を保存するためのリポジトリモジュールはファイルを読み取ります。ノードには、HTTPを使用してマイクロブログを構築するためのライブラリがあります。 http
fs
ブログ投稿リポジトリを保存するには、完全に機能するデータベースの代わりにGITを選択します。その理由は、Git自体がバージョン制御されたテキストドキュメントリポジトリであるためです。これはまさにブログ投稿データを保存するために必要なすべてです。依存関係としてデータベースの追加を取り除くと、多くの問題のためにコードを書く必要がなくなりました。 http
fs
ブログ投稿をマークダウン形式に保存し、
ユニットテストでは、優れたテストランナーRoast.itを選択しました。依存関係がなく、単体テストのニーズを満たすため、この代替品を選択しました。テープのような別のテストランナーを選択できますが、約8つの依存関係があります。私がローストが好きな理由は、依存関係がないからです。
このコンポーネントのリストを使用すると、マイクロブログを構築するために必要なすべての依存関係があります。 marked
依存関係を選択するのは簡単ではありません。重要なのは、現在の問題の範囲を超えるものが依存関係になる可能性があることだと思います。たとえば、テストランナーやデータリポジトリを構築していないため、リストに追加します。与えられた依存関係は、ソリューションを飲み込んでコードをハイジャックすることはできません。したがって、軽量コンポーネントのみを選択することは理にかなっています。
この記事では、ノード、NPM、およびGIT、およびさまざまなテスト方法にすでに精通していることを前提としています。マイクロブログを段階的に構築する各段階を実行するのではなく、コードの特定の領域に焦点を当てています。自宅でのアクションに従い、コードがGitHubにアップロードされている場合は、各コードスニペットを試すことができます。
テスト
テストでは、コードに自信があり、フィードバックループを強化します。プログラミングのフィードバックループとは、新しいコードを作成することと実行するまでにかかる時間を指します。どのWebソリューションでも、これは多くのレイヤーをスキップしてフィードバックを得ることを意味します。たとえば、ブラウザー、Webサーバー、さらにはデータベースもあります。複雑さが増すと、これはフィードバックを得るのに数分または1時間かかることを意味します。ユニットテストを使用して、これらのレイヤーを削減し、簡単なフィードバックを得ることができます。これにより、現在の問題に焦点が当てられます。
速いユニットテストを書くことでソリューションを開始するのが好きです。これにより、新しいコードのテストの作成を開始しました。これは、Roast.itを使用して実行を開始する方法です。
ファイル:package.json
に追加します
<code class="language-json">"scripts": { "test": "node test/test.js" }, "devDependencies": { "roast.it": "1.0.4" }</code>
ファイルは、すべてのユニットテストを導入して実行する場所です。たとえば、次のことを行うことができます
test.js
<code class="language-javascript">var roast = require('roast.it'); roast.it('Is array empty', function isArrayEmpty() { var mock = []; return mock.length === 0; }); roast.run(); roast.exit();</code>を実行します。私の喜びに、新しいコードをテストするために一生懸命働く必要はもうありません。これがテストの目的です。幸せなプログラマーは自信を獲得し、ソリューションに集中します。
npm install && npm test
skeleton
マイクロブログはノードを使用してクライアントリクエストに応答します。効果的な方法は、
ノードAPIを使用することです。これは、次の抜粋で見ることができます:http.CreateServer()
app.js
<code class="language-javascript">/* app.js */ var http = require('http'); var port = process.env.port || 1337; var app = http.createServer(function requestListener(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8'}); res.end('A simple micro blog website with no frills nor nonsense.'); }); app.listen(port); console.log('Listening on http://localhost:' + port);</code>:
package.json
<code class="language-json">"scripts": { "start": "node app.js" }</code>はデフォルトのルートになり、クライアントにメッセージを返します。アイデアは、ブログ投稿コンテンツで応答するなど、他の応答を返すためのルートを追加することです。
http://localhost:1337/
フォルダー構造
アプリケーションの構造を構築するには、次の主な部分を使用することにしました。
これらのフォルダーを使用してコードを整理します。各フォルダーの目的の概要は次のとおりです。
:オリジナルのブログ投稿を純粋なマークダウンフォーマットに保存します
blog
message
route
test
view
最初のユースケースでは、ブログ投稿への別のルートを紹介します。私はそれをBlogRoute
と呼ばれるテスト可能なコンポーネントに入れることにしました。私が好きなのは、あなたがそれに依存関係を注入できるということです。ユニットとその依存関係の間の懸念のこの分離により、単体テストが可能になります。各依存関係は、分離されたテストでモックを取得します。これにより、不変で繰り返し可能な高速テストを書くことができます。
コンストラクターは次のようになります
<code class="language-json">"scripts": { "test": "node test/test.js" }, "devDependencies": { "roast.it": "1.0.4" }</code>効果的な単体テストは次のとおりです
現在、
<code class="language-javascript">var roast = require('roast.it'); roast.it('Is array empty', function isArrayEmpty() { var mock = []; return mock.length === 0; }); roast.run(); roast.exit();</code>ノードAPIから来るオブジェクトが期待されています。テストを渡すには、次のことを行います。
これにより、リクエストパイプラインに接続できます。以下をBlogRoute
:req
で行うことができます
<code class="language-javascript">/* app.js */ var http = require('http'); var port = process.env.port || 1337; var app = http.createServer(function requestListener(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8'}); res.end('A simple micro blog website with no frills nor nonsense.'); }); app.listen(port); console.log('Listening on http://localhost:' + port);</code>テストの利点は、実装の詳細を事前に心配する必要がないことです。すぐに定義します。
およびapp.js
オブジェクトは、
<code class="language-json">"scripts": { "start": "node app.js" }</code>
リポジトリmessage
res
次に解決される問題は、元のブログ投稿データを読むことです。 Nodeは、ファイルシステムから読み取るために使用できるreq
モジュールを提供します。 http.createServer()
このコードスニペットはBlogRoute.route()
にあります。ソリューションの中心で、リポジトリのテキストファイルを読み取ります。 fs
は非同期操作であることに注意してください。そのため、
これにより、ファイルioの要件が提供されます。私がそれについて気に入っているのは、それが1つの問題しか解決しないということです。これはファイルの読み取りなどのクロスドメインの問題であるため、単体テストを行う必要はありません。単体テストは、他のコードのコードではなく、独自のコードの分離のみをテストする必要があります。
<code class="language-javascript">/* route/blogRoute.js */ var BlogRoute = function BlogRoute(context) { this.req = context.req; };</code>
理論的には、メモリ内のファイルシステムをシミュレートし、この方法でユニットテストを書き込むことができますが、ソリューションはどこでも懸念を漏らし、混乱に変わり始めます。 message/readTextFile.js
ファイルの読み取りなどのクロスドメインの問題は、コードの範囲を超えています。たとえば、読み取りファイルは、直接制御できないサブシステムに依存します。これにより、テストが壊れやすくなり、フィードバックループの時間と複雑さが増加します。これは、ソリューションから分離する必要がある問題です。 fs.readFile()
fn
Markdown Parser
次の問題は、元のマークダウンデータをリポジトリからHTMLに変換することです。このプロセスは、2つのステップに分かれています
フォルダー
からHTMLテンプレートを取得しますマークダウンをHTMLに解析し、テンプレートに記入します
サウンドプログラミングでは、大きな問題を小さく、扱いやすい部分に分解することです。最初の質問を解決しましょう。私が
になっているものに基づいてHTMLテンプレートを取得する方法は?
view
これは、前のセクションで使用された仮想コールバックを、次のことを行います
dummyTest
<code class="language-json">"scripts": { "test": "node test/test.js" }, "devDependencies": { "roast.it": "1.0.4" }</code>
以上がnode.js、git、およびマークダウンを使用してマイクロブログを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。