状況
debugノードではmsg.payloadがきちんと出力されているのに、http出力ノードでは「No response object」というエラーになる。
原因
途中でfunctionノードでmsgオブジェクトを新しく作成した際に、msg.reqとmsg.resを引き継いでいなかった。
以下の記事にも書いてありました。
node-redの覚書|JavaScript スニペット - littlewing
ドキュメントにも書いてあるのですが、 HTTPでレスポンスするためには、HTTP requestの.res .reqを引き回してあげないといけません。
はい、ドキュメントをちゃんと読みなさいということですね。
解決方法
msgオブジェクトを何らかの理由で新しく作成した場合には、msgの.reqと.resを引き継ぐ。
var newMsg = {};
newMsg.req = msg.req;
newMsg.res = msg.res;
// なんかの処理
return newMsg;