とあるWeb屋の備忘録

とあるWeb屋の備忘録。たまに雑記。

Node.jsの標準モジュールquerystringについて

Node.jsの標準モジュールquerystringについて

Node.jsを勉強する中で理解が追い付かないところがあったので整理してみたいと思います。

querystringの使い方

querystringはクエリ文字列をオブジェクト形式に変換してくれるNode.jsの標準モジュールの一つです。
※標準モジュールとはNode.jsとともに標準でインストールされているもの。つまりnpmインストールしなくても使えます。
標準モジュールには他にもEvents,stream,buffer,httpなどいろいろあります。種類は以下参照。
https://nodejs.org/api/index.html

querystring単体は以下参照
https://nodejs.org/api/querystring.html#querystring_querystring_parse_str_sep_eq_options

var qs = require('querystring'); 

//デフォルトでは = を割り当て文字として認識するので以下は変換失敗になる
console.log(qs.parse("name>tom")); // { 'name>tom': '' } parse失敗

//以下は変換成功
console.log(qs.parse("name=tom")); // { name: 'tom' } parse成功

上のソース例はシンプルにパースした例だけど実際もっといろいろできます。
例えば複数のクエリが来てもデフォルトで対応できます。セパレータはデフォルトでは & 。parseメソッド実行時に引数を与えることで好きなセパレータに指定可能。
さらにオプションを使えば複数のクエリの中から任意の個数だけをオブジェクト形式にしたり、デコードしたり色々できます。
以下に詳しくまとまっています!とても参考になりました! https://qiita.com/chuck0523/items/d8cff2ecfd208e8e513c

いったんここまで!疑問点は明日以降も追記していきます!

Node.jsでEJSを使う方法を追記しました!

Node.jsでEJSを使う!

Node.jsでEJSを扱う一例を以下にあげます。
書き方はいろいろあるかと思いますが、ドットインストールのNode.js入門を参考にしました!

まずEJSを読み込むためにfsモジュールとejsモジュールをrequireします。 fs.readFileSyncでEJSを読み込みます。readFileではなくreadFileSyncを使うのが大事です!(非同期ではなく同期処理をする!)
EJSをレンダリングするときに色々と処理をする場合は、レンダリングする処理を関数にしておくとスッキリ書けてわかりやすい!
下のソースでは、変数postsにデータが入っているとして、それを変数内のデータをEJSに渡してレンダリングさせる流れ。
function renderForm()を定義して、引数に変数postsとreqオブジェクトをとります。
reqオブジェクトはブラウザにレンダリングするために必要です。

var fs = require('fs);
var ejs = require('ejs');

var template = fs.readFileSync(__dirname + '/hoge.ejs', 'utf-8');

function renderForm(posts, res) {
    var data = ejs.render(template, {
        posts: posts
    });
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    res.end();
}

server.on('request', (req, res) => {
    if(req.method == "POST") {
        //処理書く
    }else {
        renderForm(posts, res);
    }
});

server.listen(3000, '127.0.0.1');
console.log("server listening...");