Node.js

[Node.js] expressで作るHTTPサーバ – 入門編 その3「非同期処理とファイル」

※この記事は専門学校の講義用に作成されたものです

Node.js+expressでHTTPサーバを作成する第3段。今回は最終的にファイル処理について取り上げるのですが、その前に知っておかないとグローバル変数以上のハマりどころである「非同期処理」についても説明します。Node.jsはApacheなどのWebサーバと比べると仕組みが大きく異ります。この違いをまずは抑えましょう。
続きを読む

[Node.js] expressで作るHTTPサーバ – 入門編 その2「グローバル変数の生存戦略編」

※この記事は専門学校の講義用に作成されたものです

Node.js+expressでHTTPサーバを作成する第2段。今回は「罠」にも「武器」にもなるポイントについてお話します。

PHPでサーバサイドを実装する際には、Webサーバとしての機能はApacheが受け持つパターンが多いわけですが、この場合PHPはリクエストがある度に起動と終了を繰り返します。つまり起動時に前回の処理結果などを気にする必要は基本的にありません。ところがexpressでサーバを作っている場合には1つのプログラムが起動しっぱなしであることを意識する必要があるのです。
続きを読む

[Node.js] expressで作るHTTPサーバ – 入門編 その1

※この記事は専門学校の講義用に作成されたものです

Node.jsでHTTPサーバを作成します。

以前からNode.jsはサーバを作るための言語であるという誤解している方が結構いらっしゃるのですが、標準モジュールだけでも非常に気軽にHTTPサーバをポンッと作成して立ち上げることが出来てしまうことも起因しているのだと思います。外部のモジュールを取ってくれば様々なサーバ・ソフトウェアが転がっていることでも更に拍車をかけたのでしょう。

今回は標準のモジュールに加えてExpressと呼ばれるモジュールと組み合わせることで、さらに簡単にWebサーバを構築する手順について解説します。
続きを読む

[Node.js] JSONをCSV形式でファイルに書き込む – csv-writer

小ネタです。
csv-writerモジュールを使うとJSON的なデータをCSV形式でかんたんに保存することができます。

// CSVにしたいデータ(オブジェクト)
const data = [
  {id:1, title:"吾輩は猫である", view:123},
  {id:2, title:"坊っちゃん",     view:456},
  {id:3, title:"こころ",        view:789}
];

// 準備
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
  path: '/var/tmp/data.csv',       // 保存する先のパス(すでにファイルがある場合は上書き保存)
  header: ['id', 'title', 'view']  // 出力する項目(ここにない項目はスキップされる)
});

// 書き込み
csvWriter.writeRecords(data)
  .then(() => {
    console.log('done');
  });

次のようなファイルが生成されます。

$ cat /var/tmp/data.csv
1,吾輩は猫である,123
2,坊っちゃん,456
3,こころ,789

続きを読む

[JavaScript] 既存のオブジェクトにメソッドを追加する

小ネタです。
JavaScriptのグローバルオブジェクトには様々なメソッドが最初から用意されています。例えば文字列を扱うStringには、検索置換するreplace()や一部を取り出すslice()などです。ここに自分で用意したオレオレなメソッドを追加することができます。

結論から言うとprototypeで宣言するだけ。以下の例では文字列中のホワイトスペースをすべて削除する、連続するスペースを1つにまとめてくれるメソッドを追加しています。

/**
 * めっちゃtrimするメソッド
 */
String.prototype.trim2 = function(){
  return(
    this
        .trim()                     // 両端のスペースを削除
        .replace(/\r|\n|\t/g, "")   // 改行とタブを削除
        .replace(/\s{2,}/, " ")     // 複数のスペースを1つにまとめる
  );
}

実際に文字列の後ろにチェーンして利用できるようになります。

" foo   bar ".trim2()  // "foo bar"

なお、利用する箇所よりも前にprototypeで定義しないとエラーとなるのでご注意を。またアロー関数式だとthisの意味が変わってくるのでご注意ください。

続きを読む

[Node.js] JSONをキレイに整形して出力する

小ネタです。
結論から言うと、JSON.stringify()の第2引数にnull、第3引数に数値を指定することで人間がパッと見て分かるよう整形した文字列が返されます。

const data = [
  {
    "season": "202004",
    "title": "乙女ゲームの破滅フラグしかない悪役令嬢に転生してしまった…",
    "company": "SILVER LINK."
  },
]

// 機械に優しい
const str1 = JSON.stringify(data);
console.log(str1)

// 人間に優しい
const str2 = JSON.stringify(data, null, 2);
console.log(str2)

続きを読む

NeDBのデータファイルをCLIから操作する

Node.jsなどからローカルファイルを簡易的なデータベースとして利用できるNeDBですが、ちょっとデータを編集するのに毎回コードを書くのも面倒。そこでCLIから利用できる「nedb-repl」を使うと非常に楽ちんに操作できます。


続きを読む

はじめてのSocket.io #1 「リアルタイムなチャットを作る」

Node.jsのキラーソフトの一つとも言われて久しいSocket.ioを使ってリアルタイム通信を行います。コツさえ分かれば非常に簡単に開発できてしまうのでプロトタイプや小規模なプロジェクトにオススメ。

今回は以下の動画のように複数のクライアント間でリアルタイムに通信が行える簡易チャットをHTML+JavaScriptで作成してみます。

続きを読む

[Node.js] HTTP通信を行い外部サーバのファイルを取得する – request

Node.jsで外部とHTTPで通信を行います。
標準モジュールでも頑張ればもちろん可能ですが、ちょっと大変なので今回はrequestモジュールを利用してサクッと作ります。もちろん外部サーバからファイルを取得する以外にも、RESTful APIを利用するなどHTTPの上で行われる様々なことに利用できます。

続きを読む

GoogleのCloud Translation API v3を触ってみる

自然言語の翻訳APIに興味が出てきたのでちょっと触ってみることにします。ここではすでにテキスト情報になっており、日本語から英語など別の言語に自動的に変換してくれる物を想定しています。

Google Cloud Translate

Google Cloud Translateサイトより

すでに様々なサービスが世に出ていますが、今回はGoogleの翻訳APIを試してみます。新しいバージョン3(以降v3)ではJava、Python、Node.jsから利用できますが、今回はNode.jsで利用します。

続きを読む

[AWS] Node.js版 aws-sdkを設定する

Node.jsからAWSの様々なサービスを利用できるaws-sdkを使ってみます。
今回はインストールから利用開始できるまでの設定を行います。

AWS上の操作は大丈夫という方は、「Nodeから利用する」の項目からご覧ください。

続きを読む