发送hl7测试消息并使用节点

时间:2015-08-11 15:06:35

标签: express hl7

我想创建一个hl7测试消息并将其发送到我的快速服务器(正在侦听localhost:3000)。

1)我接收了消息 http://hl7inspector.com/并下载了检查员。

2)我将消息复制到一个文件中(带有sublime)并将消息加载到工具中。这里可以选择很多选项。 如果我想将其与快递一起使用,我需要设置什么?

enter image description here

3)我使用该工具验证了消息,这里抛出了很多警告(未知的段和字段)。 上面的链接中的消息有什么问题吗?我尝试了几条消息,但没有一条消息有效。

enter image description here

4)我在express中设置路由并使用nodengine-hl7(http://evanlucas.com/nodengine-hl7/)来解析它

  hl7 = require('nodengine-hl7')
  hl7Parser = hl7.Parser

  app.get('/hl7/:hl7Msg', (req, res) ->
    console.log req.params
  )

hl7消息是作为get请求发送的,还是自己的请求类型?我怎样才能在检查员中找到网址?我可以选择主机和端口。

编辑: 我猜hl7不能用快递发送和接收。必须创建一个新服务器。 nodengine-hl7只是一个解析器,因此我决定切换到node-hl7。新代码是:

hl7 = require('node-hl7')
hl7Server = new hl7.Server()

hl7Server.on('hl7', (msg)->
  console.log msg
)

我自己的研究:

如何读取hl7消息 http://www.interfaceware.com/blog/what-does-an-hl7-message-look-like/

消息由多个段组成。每个段都有字段(可能是子字段等)。要查看段和字段何时开始使用分隔符。

|字段分隔符

^子字段分隔符

~重复字段分隔符

&逃脱角色

\子子字段分隔符

分隔符始终位于邮件的MSH细分中。 MSH的第9个字段是消息类型。

有某些预定义的标准化细分。使用消息类型我知道哪些字段是预期的。

节点包

测试工具

Testing HL7 Messages

额外资源:

http://www.hl7.org/

1 个答案:

答案 0 :(得分:0)

到目前为止我尝试了两种工具。他们都可以发送消息。

HL7 Soup(windows)和HL7 Inspector(mac)。我将消息从HL7 Soup复制到HL7 Inspector以获得相同的样本。这些警告似乎并不重要。

如果我想将它与快递一起使用,我需要设置什么?&& hl7消息是作为get请求发送的,还是自己的请求类型?我怎样才能在检查员中找到网址?我可以选择主机和端口。

我想这种通信不可能使用express。相反,我使用与我的快速服务器不同的端口设置TCP服务器,稍后我将使用socket.io在它们之间进行通信:

net = require('net')
hl7 = require('nodengine-hl7')
split = require('split')
joinStream = require('join-stream')
Parser = hl7.Parser
parser = new Parser()

parser.on('error', (err) ->
  console.log('Error parsing:', err)
)

# parser.on('messages', (messages) ->
#   console.log(messages)
#   console.log "l",messages.length
#   for message, index in messages
#     console.log("Message #{index}:", message)
# )

parser.on('message', (message) ->
  for segment in message.segments
    console.log('Segment:', segment.parsed.SegmentType)
    console.log(segment.parsed)
    console.log('------------------------------------')
  console.log('=====================================')
  return
)

createServer = () ->
  server = net.createServer({
    allowHalfOpen: false,
    pauseOnConnect: false
  },
  (stream) ->
    console.log 'Client connected'

    stream.setEncoding 'utf8'

    stream.addListener 'error', (err) ->
      console.log 'Stream Error' + err
      return

    stream.addListener 'end', ->
      console.log 'Client disconnected'
      stream.end()
      return

    stream.addListener 'finish', ()->
      console.log('done')
    #stream.pipe(split(/\r/)).pipe(joinStream(/\n/)).pipe(parser) #Mac
    #stream.pipe(split(/\n/)).pipe(joinStream(/\r/)).pipe(parser) # Unix
    stream.pipe(split(/\r\n/)).pipe(parser) # Win
    #stream.pipe(split(/\r\n/)).pipe(split(/\n/)).pipe(split(/\r/)).pipe(parser)

    return
  )
  server.listen 59895

  server.on('error', (err) ->
    if (err.code == 'EADDRINUSE')
      console.log('Address in use, retrying...')
      setTimeout(
        () ->
          server.close()
          createServer()
        1000
      )
  )

  server.on('close', (err) ->
    console.log "server closed"
  )

createServer()

上述解决方案远非完美。断开连接时不会重新连接。我没有正确识别&对eol字符作出反应,这是不同的。在win和mac(或者每个应用程序)上。