Kaynağa Gözat

Signed-off-by: lqq <lqq@wswin.cn>

lqq 9 yıl önce
işleme
91c6299a2f
4 değiştirilmiş dosya ile 148 ekleme ve 0 silme
  1. 84 0
      app.js
  2. 42 0
      database/db.js
  3. 13 0
      database/loginRecord.js
  4. 9 0
      package.json

+ 84 - 0
app.js

@@ -0,0 +1,84 @@
+/**
+ * Created by root on 2015-07-20.
+ */
+var restify = require('restify');
+var loginRecordProvider = require('./database/loginRecord');
+var BufferHelper = require('bufferhelper');
+var db = require('./database/db');
+
+var server = restify.createServer({
+    name: 'BehaviorMonitor',
+    version: '1.0.0'
+});
+server.use(restify.acceptParser(server.acceptable));
+server.use(restify.queryParser());
+server.use(restify.bodyParser());
+
+server.post('/api/loginrecord', function(req, res)
+{
+    var bufferHelper = new BufferHelper();
+    req.on('data',function(chunk)
+    {
+        bufferHelper.concat(chunk);
+    });
+
+    req.on('end', function()
+    {
+        try
+        {
+            var chunks = bufferHelper.toBuffer().toString();
+            console.log('receive data:\n'+chunks);
+            var json = JSON.parse(chunks);
+            json.gateway = getRemoteAdress(req);
+            return loginRecordHandler(res, json, chunks);
+        }
+        catch (ex)
+        {
+            console.log('error:'+ex);
+            return error(res,'data format error.');
+        }
+    });
+});
+
+function getRemoteAdress(req)
+{
+    var ip = req.headers['x-forwarded-for'] ||
+        req.connection.remoteAddress ||
+        req.socket.remoteAddress ||
+        req.connection.socket.remoteAddress;
+    return ip;
+};
+
+function loginRecordHandler(res,msg,raw)
+{
+    if(!msg.loginName)
+        return error(res,'loginName is null.');
+
+    loginRecordProvider.insert(msg, function(err)
+    {
+        if(err)
+            error(res,error);
+        else
+            return ok(res);
+    });
+};
+
+function error(res,error)
+{
+    console.log(error);
+    sendJSON(res,0,error);
+};
+
+function ok(res)
+{
+    sendJSON(res,1,'ok');
+};
+
+db.active(function(err){
+    if (err)
+        console.log(err);
+    else
+        server.listen(8080, function () {
+            console.log('%s listening at %s', server.name, server.url);
+        });
+});

+ 42 - 0
database/db.js

@@ -0,0 +1,42 @@
+/**
+ * Created by root on 2015-07-20.
+ */
+var MongoClient = require('mongodb').MongoClient
+    , assert = require('assert');
+
+var database;
+
+// Connection URL
+var url = 'mongodb://localhost:27017/Behavior';
+// Use connect method to connect to the Server
+
+
+module.exports.active = function(callback){
+    MongoClient.connect(url, function(err, db) {
+        if (!err){
+            console.log("Connected correctly to server");
+            database = db;
+        }
+        callback(err);
+    });
+};
+
+module.exports.getCollection = function(name, callback){
+    if (!database && !database.connected)
+        callback(database.collection(name));
+
+    database.collection(name, {strict:true}, function(err, collection) {
+        if (!err)
+            callback(err, collection);
+        else{
+            // Create the collection
+            database.createCollection(name, function(err, result) {
+                // Retry to get the collection, should work as it's now created
+                if (!err)
+                    database.collection(name, {strict:true}, callback);
+            });
+        }
+    });
+
+};
+

+ 13 - 0
database/loginRecord.js

@@ -0,0 +1,13 @@
+/**
+ * Created by root on 2015-07-20.
+ */
+var db = require('./db.js');
+var collectionName = 'LoginRecords';
+
+module.exports.insert = function(record, callback)
+{
+    db.getCollection(collectionName, function(err, collection){
+        if (!err)
+            collection.insert(record);
+    });
+};

+ 9 - 0
package.json

@@ -0,0 +1,9 @@
+{
+    "name": "BehaviorMonitor",
+    "version": "0.0.1",
+    "dependencies":{
+        "mongodb":"*",
+        "restify":"*",
+        "bufferhelper":"*"
+    }
+}