Express 发送hl7测试消息并使用node监听

Express 发送hl7测试消息并使用node监听,express,hl7,Express,Hl7,我想创建一个hl7测试消息并将其发送到我的express服务器(它正在侦听localhost:3000) 1) 我从他那里得到消息 并下载了检查员 2) 我将消息复制到一个文件中(使用sublime),并将消息加载到工具中。这里可以选择很多选项如果我想在express中使用它,我需要设置什么? 3) 我用工具验证了消息,在这里它抛出了很多警告(未知的段和字段)上面链接中的消息有什么问题吗?我尝试了几条消息,但都没有成功 4) 我在express中设置了一个路由,并使用nodeengine-h

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

1) 我从他那里得到消息 并下载了检查员

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

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

4) 我在express中设置了一个路由,并使用nodeengine-hl7()对其进行解析

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

  app.get('/hl7/:hl7Msg', (req, res) ->
    console.log req.params
  )
hl7消息是作为get请求发送的,还是属于自己的请求类型??我如何在inspector中对url进行寻址?我可以选择主机和端口。

编辑: 我想hl7不能通过快递发送和接收。必须创建一个新服务器
nodeengine-hl7
只是一个解析器,所以我决定切换到
node-hl7
。新守则是:

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

hl7Server.on('hl7', (msg)->
  console.log msg
)
我自己的研究: 如何读取hl7消息

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

|
字段分隔符

^
子字段delimeter

~
重复字段分隔符

转义字符

\
子字段分隔符

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

存在某些预定义的标准化段。通过消息类型,我知道需要哪些字段

节点包
  • (仅解析,无服务器)
测试工具

其他资源:

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

HL7汤(windows)和HL7检查器(mac)。我将消息从HL7Soup复制到HL7Inspector,以获得相同的示例。这些警告似乎并不重要

如果我想在express中使用它,我需要设置什么?&& hl7消息是作为get请求发送的,还是属于自己的请求类型??我如何在inspector中对url进行寻址?我可以选择主机和端口。

我想用express进行这种交流是不可能的。相反,我使用与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()

上述解决方案远非完美。断开连接时不会重新连接。我没有正确识别和反应的下线字符是不同的。在赢和mac(或可能每个应用程序)

对于发送任意测试消息,您可以使用Mike Litherland的
hl7 comm
-hl7inspector是否有优势?通常可以指定主机url并对其进行路由。我怀疑,我需要使用net监听并为hl7消息创建一个自己的端口。在我看来,
hl7 comm
可以发送消息,而
hl7inspector
可以显示消息(甚至可能是
mllp
接收),也许更好的工具是,它具有消息检查/验证功能和发送/接收功能。此外,使用IMHO也相当容易。我专门将其用于我自己的HL7调试工作。另请参阅Inner Harbor Software的HL7Spy-您的接收器似乎未实现
MLLP
协议
HL7
version
2.x
消息不由平台特定的新行字符分隔。它是二进制(几乎是人类可读的)协议