ホームページ >ウェブフロントエンド >jsチュートリアル >node.js、git、およびマークダウンを使用してマイクロブログを構築します

node.js、git、およびマークダウンを使用してマイクロブログを構築します

Christopher Nolan
Christopher Nolanオリジナル
2025-02-17 10:48:14502ブラウズ

node.js、git、およびマークダウンに基づいてマイクロブログを構築します

この記事では、node.js、git、およびいくつかの依存関係を使用してマイクロブログを構築する方法について説明します。このアプリは、リポジトリに提出されたファイルから静的コンテンツを提供するように設計されています。アプリケーションを構築およびテストする方法を学び、ソリューションを提供するプロセスに関する洞察を得ることができます。最終的には、構築できるミニマリストで実行可能なブログアプリケーションがあります。

Building a Microblog Using Node.js, Git and Markdown

キーポイント:

    node.jsは、不必要な複雑さを必要としないマイクロブログプラットフォームを構築するのに理想的なAPIのバランスの取れたセットを提供します。
  • gitは、従来のデータベースを使用せずにブログ投稿をバージョンされたテキストドキュメントとして保存するために使用されます。
  • マークダウンはブログ投稿のフォーマットに使用され、軽量コンテンツを可能にし、徐々に強化できます。
  • ロースト。単純で依存関係がなく、迅速なフィードバックと開発者の信頼性を高めることができるため、単体テストに使用されます。
  • マイクロブログアーキテクチャは、ブログコンテンツを提供するためのルーティングと最小限の依存関係により、シンプルさを中心に設計されています。
  • アプリケーションでは、カスタムマークダウンパーサーとシンプルなテンプレート関数を使用してMarkdownをHTMLに変換し、ブログが軽量で応答性が高いことを確認します。
  • マイクロブログの主なコンポーネント

素晴らしいブログを作成するには、まず第一に、いくつかのコンポーネントが必要です。

HTTPメッセージを送信するためのライブラリ

ブログ投稿を保存するためのリポジトリ
  • 単位テストランナーまたはライブラリ
  • Markdown Parser
  • httpメッセージを送信するには、node.jsを選択しました。これは、サーバーからハイパーテキストメッセージを送信するために必要なすべてを提供するためです。特に関心のある2つのモジュールは、
  • および
  • です。
モジュールは、ノードHTTPサーバーを作成します。

モジュールはファイルを読み取ります。ノードには、HTTPを使用してマイクロブログを構築するためのライブラリがあります。 http fsブログ投稿リポジトリを保存するには、完全に機能するデータベースの代わりにGITを選択します。その理由は、Git自体がバージョン制御されたテキストドキュメントリポジトリであるためです。これはまさにブログ投稿データを保存するために必要なすべてです。依存関係としてデータベースの追加を取り除くと、多くの問題のためにコードを書く必要がなくなりました。 http fsブログ投稿をマークダウン形式に保存し、

を使用してそれらを解析することを選択しました。後でこれを行うことにした場合、これにより、元のコンテンツを徐々に強化することができます。 Markdownは、通常のHTMLの優れた軽量の代替品です。

ユニットテストでは、優れたテストランナー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

このスクリプトをNPMスクリプトで実行してください:
<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/フォルダー構造

アプリケーションの構造を構築するには、次の主な部分を使用することにしました。

これらのフォルダーを使用してコードを整理します。各フォルダーの目的の概要は次のとおりです。 node.js、git、およびマークダウンを使用してマイクロブログを構築します

:オリジナルのブログ投稿を純粋なマークダウンフォーマットに保存します

  • :クライアントへの応答メッセージを構築するための再利用可能なモジュールblog
  • :デフォルトのルート以外のルートmessage
  • :ユニットテストを書く場所route
  • :HTMLテンプレートを配置する場所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から来るオブジェクトが期待されています。テストを渡すには、次のことを行います。

    これにより、リクエストパイプラインに接続できます。以下をBlogRoutereqで行うことができます

    <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オブジェクトは、

    ノードAPIからのものです。
    <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() fnMarkdown Parser

    次の問題は、元のマークダウンデータをリポジトリからHTMLに変換することです。このプロセスは、2つのステップに分かれています

    フォルダー

    からHTMLテンプレートを取得します

    マークダウンをHTMLに解析し、テンプレートに記入します

    サウンドプログラミングでは、大きな問題を小さく、扱いやすい部分に分解することです。最初の質問を解決しましょう。私が

    になっているものに基づいてHTMLテンプレートを取得する方法は?

      1つの方法は次のとおりです
    • viewこれは、前のセクションで使用された仮想コールバックを
    • と呼ばれる仮想コールバックを置き換えることを忘れないでください。
    • コールバックを置き換えるには、

      、次のことを行います dummyTest

      (スペースの制限のために後続のコンテンツは省略されています。必要に応じて自分で追加してください)
      <code class="language-json">"scripts": {
        "test": "node test/test.js"
      },
      "devDependencies": {
        "roast.it": "1.0.4"
      }</code>

以上がnode.js、git、およびマークダウンを使用してマイクロブログを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:chart.js 2.0の紹介次の記事:chart.js 2.0の紹介