0
Expressとnodejs child_processを使用して、blogFeedPageにリクエストを行い、子プロセスを通してスクレイプし、クライアントに送り返します。ブログコンテンツのJSON表現。 以下のコードスニペットは、クライアントへの応答をどのように処理しているかを示しています。子プロセスから 'exit'イベントと 'error'イベントを処理するための最良の方法がわかりません。私の主な関心事は、レスポンスの送信を二度試みたことですが、クライアントが応答なしで待っているのを避けることも望みます。nodejs子プロセス上のリスナーの場合、ダブル・レスポンス送信の試行を避けるために、レスポンス送信を処理する方法
request.get({ url: blogUrl }, function (err, res, blogFeedPage) {
if (err) return next({ status: 502, message: 'error while trying to contact the blog feed server' })
var child = childProcess.fork(__dirname + '/child.js')
child.on('message', function (blogFeeds) {
child.kill()
if (!blogFeeds || blogFeeds && blogFeeds.error) {
return next({ status: 503, message: 'Error while trying to parse the blog feed' })
}
clientRes.sendSuccess(200, 'success', blogFeeds)
res.status(200).send({ status: 'success', data: blogFeeds })
})
child.on('exit', function (code, signal) {
// ??? send response to the Client if not already sent
child.kill()
})
child.on('error', function (error) {
// ??? send response to the Client if not already sent
child.kill()
})
child.send({ html: blogFeedPage })
なぜ進捗状況を記録するためのローカル変数を導入しないのですか?応答がすでに送信されている場合はtrueに設定します。 –
ありがとう@ジョナスKöritzしかし、それほどエレガントなソリューションではありません。 – matteo
各メッセージイベントの応答をローカル変数に集約し、終了時に収集されたすべてを送信することもできます。 –