2017-06-13 42 views
0

我正在使用node-coap將數據發送到coap服務器,我需要在數據包中使用自定義選項,所以我正在運行此代碼:如何使用coap.registerOption註冊一個新選項

var req = { 
hostname:"localhost", 
method:"PUT", 
pathname:"create1", 
} 
    var coapReq = coap.request(req) 
    coap.registerOption('newOption',toBinary,toString) 
    coapReq.setOption('newOption',b.from('Hello World')) 
    coapReq.end() 

功能toBinary和toString定義如下:

function toBinary(data){ 
    return b.from(data) 
} 

function toString(data){ 
    return data.toString() 
} 

這段代碼不工作。什麼是使用registerOption方法的正確方法?

+0

你修好了嗎?請追加堆棧跟蹤。 –

回答

1

在node-coap自述文件中,setOption的示例對自定義選項使用數字名稱。

var coap = require('coap') 

function toBinary(text){ 
    return new Buffer(text); 
} 

function toString(data){ 
    return data.toString() 
} 

coap.registerOption("555", toBinary, toString) 

server = coap.createServer() 

server.on('request', function(req, res) { 
    console.log(req.options); 
    res.end() 
}) 

// the default CoAP port is 5683 
server.listen(function() { 
    var req = { 
    hostname:"localhost", 
    method:"PUT", 
    pathname:"create1", 
    } 
    var coapReq = coap.request(req) 
    coapReq.setOption('555', "Hello World") 

    coapReq.on('response', function(res) { 
    res.pipe(process.stdout) 
    res.on('end', function() { 
     process.exit(0) 
    }) 
    }) 

    coapReq.end() 
}) 

並且選項分別爲:

[ { name: 'Uri-Path', value: <Buffer 63 72 65 61 74 65 31> }, 
{ name: '555', value: 'Hello World' } ] 

這是不可能的,因爲節點COAP使用其中的選項名稱解析像整數COAP分組模塊傳遞一個字母選項名稱:

https://github.com/mcollina/coap-packet/blob/master/index.js#L342

我建議你創造e節點-coap github回購中的問題/ PR在README中對此進行更清晰的解釋。

相關問題