如何在nodejs子进程的侦听器上处理响应发送,以避免双响应发送尝试

时间:2016-10-25 13:47:53

标签: node.js express child-process

我使用Express和nodejs child_process向blogFeedPage发出请求,通过子进程抓取它,并向客户端发送博客内容的JSON表示。 下面的代码片段显示了我现在处理客户响应的方式,我不知道从子进程处理'exit'和'error'事件的最佳方法是什么。我主要担心的是发送响应的双重尝试,但我也想避免客户端等待而没有回答。

  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 })

1 个答案:

答案 0 :(得分:0)

不要在消息上杀死孩子,而是将blogFeeds保存在calblack之外。然后在退出时发送消息。如果要在子进程上强制超时,请先初始化空结果,并在超时到期后终止该子进程。退出将被触发,您的空结果可以传递(或错误消息)。