我使用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 })
答案 0 :(得分:0)
不要在消息上杀死孩子,而是将blogFeeds保存在calblack之外。然后在退出时发送消息。如果要在子进程上强制超时,请先初始化空结果,并在超时到期后终止该子进程。退出将被触发,您的空结果可以传递(或错误消息)。