在給IoT CoAP添加了JSON支援之後,變得非常有意思,至少我們可以獲得我們想要的結果。在上一篇中我們介紹了一些常用的工具——CoAP 命令列工具集。 CoAP用戶端程式碼範例
開始之前我們需要有一個用戶端代碼,以便我們的服務端可以返回正確的資料並解析
var coap = require('coap');var requestURI = 'coap://localhost/';var url = require('url').parse(requestURI + 'id/1/');console.log("Request URL: " + url.href);var req = coap.request(url);var bl = require('bl');req.setHeader("Accept", "application/json");req.on('response', function(res) { res.pipe(bl(function(err, data) { var json = JSON.parse(data); console.log(json); }));});req.end();
代碼有點長內容也有點多,但是核心是這句話:
req.setHeader("Accept", "application/json");
這樣的話,我們只需要在我們的服務端一判斷,
if(req.headers['Accept'] == 'application/json') { //do something };
這樣就可以返回資料了。(轉載保留:CoAP與物聯網系統之返回JSON) CoAP Server端代碼
Server端的代碼比較簡單,判斷一下
if (req.headers['Accept'] == 'application/json') { parse_url(req.url, function(result){ res.end(result); }); res.code = '2.05'; }
請求的是否是JSON格式,再返回一個205,也就是Content,只是這時設計是請求一個URL返回對應的資料。如
coap://localhost/id/1/
這時應該請求的是ID為1的資料,即
[ { id: 1, value: 'is id 1', sensors1: 19, sensors2: 20 }]
而parse_url只是從資料庫從讀取相應的資料。
function parse_url(url ,callback) { var db = new sqlite3.Database(config["db_name"]); var result = []; db.all("SELECT * FROM basic;", function(err, rows) { callback(JSON.stringify(rows)); })}
並且全部都顯示出來,設計得真是有點不行,不過現在已經差不多了。