在经历了几次重构之后,我们的IoT终于开始有个好的代码结构,再经过几次修正之后,我们就可以很愉快地发出第一个版本,v0.1或许将会是Nodejs的一个库。
这说里Module的意义是因为我们需要在别的地方引用到db_helper这个库,也就是下一小节要的讲的内容。
这样我们就可以在server.js类似于这样去引用这个js库。
var DBHelper = require('./db_helper.js');
DBHelper.initDB();
而这样调用的前提是我们需要去声明这样的module,为了方便地导出函数功能调用。
function DBHelper(){
}
DBHelper.initDB = function(){};
module.exports = DBHelper;
虽然这里的功能很简单,简单也能做我们想做的事情。
还是继续用到了SQLite3,只是这里用到的只是基本的查询和创建。
var db = new sqlite3.Database(config["db_name"]);
var create_table = 'create table if not exists basic (' + config["db_table"] + ');';
db.serialize(function() {
db.run(create_table);
_.each(config["init_table"], function(insert_data) {
db.run(insert_data);
});
});
db.close();
首先从配置中读取db_name,接着创建table,然后调用underscore的each方法,创建几个数据。配置如下所示
config = {
"db_name": "iot.db",
"db_table": "id integer primary key, value text, sensors1 float, sensors2 float",
"init_table":[
"insert or replace into basic (id,value,sensors1,sensors2) VALUES (1, 'is id 1', 19, 20);",
"insert or replace into basic (id,value,sensors1,sensors2) VALUES (2, 'is id 2', 20, 21);"
],
"query_table":"select * from basic;"
};
而我们在上一篇CoAP与物联网系统之返回JSON所提到的url查询所做的事情便是
DBHelper.urlQueryData = function (url, callback) {
var db = new sqlite3.Database("iot.db");
var result = [];
console.log("SELECT * FROM basic where " + url.split('/')[1] + "=" + url.split('/')[2]);
db.all("SELECT * FROM basic where " + url.split('/')[1] + "=" + url.split('/')[2], function(err, rows) {
db.close();
callback(JSON.stringify(rows));
});
};
将URL传进来,便解析这个参数,接着再放到数据库中查询,再回调回结果。
这样我们就可以构成之前所说的查询功能,而我们所谓的post功能似乎也可以用同样的方法加进去。
围观我的Github Idea墙, 也许,你会遇到心仪的项目