我想创建一个hl7测试消息并将其发送到我的快速服务器(正在侦听localhost:3000)。
1)我接收了消息 http://hl7inspector.com/并下载了检查员。
2)我将消息复制到一个文件中(带有sublime)并将消息加载到工具中。这里可以选择很多选项。 如果我想将其与快递一起使用,我需要设置什么?
3)我使用该工具验证了消息,这里抛出了很多警告(未知的段和字段)。 上面的链接中的消息有什么问题吗?我尝试了几条消息,但没有一条消息有效。
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个字段是消息类型。
有某些预定义的标准化细分。使用消息类型我知道哪些字段是预期的。
答案 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(或者每个应用程序)上。