CORS とはブラウザに「No 'Access-Control-Allow-Origin' header」とか言われちゃうアレです。
まず普通に GET とか multipart/form-data での POST ならmsg.headers = {};
msg.headers["Access-Control-Allow-Origin"] ="*";
って function ノードに書いてレスポンスすれば OK!👍
でも、application/json を POST したいんじゃ!ってなるとプリフライトリクエストが発生して、上記だけでは「No 'Access-Control-Allow-Origin' header」って言われちゃいます。
しかも、Node-RED 上ではリクエストが来ているのかも確認できません。
この場合は POST のレスポンスに Access-Control-Allow-Origin を付与するのではなく、POST の前に発生する OPTIONS メソッドに対して Access-Control-Allow-Origin を付与させる必要があります。
でも、Node-RED の HTTP in ノードには OPTIONS はありません。
なのでエディター上ではリクエストが確認できません。
これに対応するには、Node-RED の設定ファイル(setting.js)を修正する必要があります。
ちなみに、Node-RED IBM Cloud Starter Application の場合は、bluemix-setting.js です。
そのファイル内にコメントアウトされている httpNodeCors という記述があるので、それをコメント解除します。
IBM Cloud で bluemix-setting.js の場合はそもそも記述がないので、
var settings = module.exports = {…(略)…}
の中に
httpNodeCors:{
origin:"*",
methods:"GET,POST,PUT,DELETE"
},
とか追記しときゃ OK です。(methods に OPTIONS は無くていい)
まぁ Continuous Delivery 利用するか CLI でなんやかんやして push とかしないとダメなんでめんどいですが。
もしかしたら Cloudant 内の settings ドキュメントの編集でも対応できるかもしれませんので、誰かチャレンジしてみてくださいw
修正したら再起動して解決ですヤッタネ☆
CORS とかプリフライトリクエストについて詳しく知りたい方はこちら。