はじめに
超初心者の定義
この一連の記事における超初心者を以下に定義します。
Webプログラミングの経験が0の状態からNode-REDを使用した人
関係するノード
本記事は、超初心者がNode-REDでnodered.orgの更新情報をSlackに通知するアプリを作ったの記事中での試行錯誤に基づいた記事です。主にmomentノードを使う際に躓いたポイントについての記述になります。
躓きポイントとその回避法
1. JSONからキーを使って取得した文字列がmomentノードに認識されない
上のFlowを実行すると、momentノード(Date/Time Formatter)の部分で警告が出ます。
last_updatedというFileが怪しいので、Debugノードを入れて調べると、
last_updatedから出てきたmsg.payloadはこの形。
changeノードから出ているのは配列であることがわかります。
ここで一つの強引な解決策として、
無理やりStringに変える
toStringmsg.payload = String(msg.payload); return msg;
を選び、最終的にこの形にして動かし解決。
2. JSONのキーの階層をmomentノードで指定できない
JSONをsplitterノードで記事ごとに分けた後、記事の構造を見てみると、
{
"id": ["tag:github.com,2008:Grit::Commit/efacef8899f713a2ecf297a78e48681131a4ec37"],
"link": [{
"$": {
"type": "text/html",
"rel": "alternate",
"href": "https://github.com/node-red/node-red.github.io/commit/efacef8899f713a2ecf297a78e48681131a4ec37"
}
}],
"title": ["\n Updated page footer\n "],
"updated": ["2015-11-28T23:05:43Z"],
"media:thumbnail": [{
"$": {
"height": "30",
"width": "30",
"url": "https://avatars3.githubusercontent.com/u/51083?v=3&s=30"
}
}],
"author": [{
"name": ["knolleary"],
"uri": ["https://github.com/knolleary"]
}],
"content": [{
"_": "\n <pre style='white-space:pre-wrap;width:81ex'>Updated page footer</pre>\n ",
"$": {
"type": "html"
}
}]
}
となっていました。ここで私はupdatedの値
2015-11-28T23:05:43Z
を取得し、momentノードに入れたかったので、以下のようにflowを作成しました。
念のため値をStringにキャスト。
msg.payload.updated = String(msg.payload.updated)
return msg;
momentノード(Date/Time Formatter)の中身はこうしました。
しかしここでこんな警告が。
payload.updatedが見つからない、でもDebugにはpayload.updatedの値が出ている状態。これはmomentノードが、プロパティの階層を追えないことで起こる警告であることが、周りの助言から発覚。
functionノードを書き換え、msg.updatedに日付を入れます。
msg.updated = String(msg.payload.updated);
return msg;
Date/Time Formatterの中身はこう変更。
これで、無事に動くようになりました。
最後に
とても便利なmomentノード、私のように躓いた初心者でもとりあえずの回避ができるように、この記事を書きました。配列からの変換はもっとスマートな方法があると思うのでお分かりの方は是非教えて下さい。よろしくお願いします。