浏览代码

提交2012年写的代码

chuwanghui 8 年之前
当前提交
334dab9b63
共有 5 个文件被更改,包括 294 次插入0 次删除
  1. 20 0
      .vscode/launch.json
  2. 80 0
      us.db.js
  3. 60 0
      us.mongodb.js
  4. 76 0
      usexpressmain.js
  5. 58 0
      usmain.js

+ 20 - 0
.vscode/launch.json

@@ -0,0 +1,20 @@
+{
+    // 使用 IntelliSense 了解相关属性。 
+    // 悬停以查看现有属性的描述。
+    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+    {
+        "type": "node",
+        "request": "launch",
+        "name": "Launch Program",
+        "program": "${workspaceFolder}/app.js"
+    },
+        {
+            "type": "node",
+            "request": "launch",
+            "name": "启动程序",
+            "program": "${workspaceFolder}/usmain.js"
+        }
+    ]
+}

+ 80 - 0
us.db.js

@@ -0,0 +1,80 @@
+//由于nodejs版本更新很快,所以下面的代码需要随着nodejs版本的调整而调整。还不太稳定。
+var mysql = require('mysql');//包含mysql驱动程序
+var db = 'UseStudio_Blog';
+
+//-----------------------连接数据库---------------------------------------------------
+var connection = mysql.createConnection({ host: '192.168.65.18', user: 'root', password: 'usestudio-1' });
+
+//----------------------指定数据库------------------------------------
+connection.query('USE ' + db);
+
+//选取数据
+exports.usselect = function (sql, callback) {
+    //---------------------------------查询,并设置回调函数------------------------------
+    //mysql guid支持得不太好,由于Http是传输文本,定为char36 
+    //如果定义为二进制binary16则设计到转义过程,消耗cpu,存储空间相对较小
+    connection.query(sql, function aa(err, results, fields) {
+        if (err) { throw err; }
+        if (results) {
+            //在控制台输出使用的语句,暂时屏蔽 //console.log(results); //console.log(fields);
+            //如果在这里关闭连接,当有第二个用户连接进来,会报错如下:“Error:cannot enqueue query ater invoking quit”,所以暂时屏蔽,以后再考虑关闭连接问题。
+            //应该和sql连接数有关。1个连接可以有多少用户可以连进来。超过多少用户开启第二个连接,这样可以算出用户数量。
+            //这个地方还涉及到如何查看mysql开启了多少个连接。每个连接支撑了多少用户,mysql一共可以同时开启多少个连接。
+            //connection.end();//关闭sql连接,何时需要关闭此连接?
+            //结果给回调函数,和传统return有区别,需要特别注意。
+            callback(JSON.stringify(results)); //返回json数据
+        }
+        else { callback('false'); }
+    });
+}
+
+//--------------------------------------------nodejs执行存储过程------------------------
+exports.usproselect = function (r, callback) {
+    connection.query("CALL PB_Select();", function (err, rows, fields) {
+        if (err) { throw err; }
+        //console.log(r);
+        r=r.concat(JSON.stringify(rows));  //
+        //console.log(JSON.stringify(rows));
+        callback(r);
+    });
+}
+
+
+exports.aaaaaa = function (callback) {
+    //exports.usproselect("CALL PB_Select();", function (results) { _replys.concat(results); });
+    connection.query("CALL PB_Select();", function (err, rows, fields) {
+        if (err) { throw err; }
+        
+        exports.usproselect(JSON.stringify(rows), callback);
+    });
+}
+
+
+//------------------------------------创建数据库-------------------------------
+/*connection.query('CREATE DATABASE '+TEST_DATABASE, function(err) {
+if (err && err.number != mysql.ERROR_DB_CREATE_EXISTS) {
+throw err;
+}
+});*/
+//不指定回调函数,如果出错,则体现为客户端错误
+//connection.query('USE '+TEST_DATABASE);
+
+//-------------------------------------创建表格,插入数据---------------------------------
+/*connection.query(
+'CREATE TABLE '+TEST_TABLE+
+'(id INT(11) AUTO_INCREMENT, '+
+'name VARCHAR(255), '+
+'PRIMARY KEY (id))'
+);*/
+
+//-----------------------------------插入数据---------------------------------------
+/*connection.query(
+'INSERT INTO '+TEST_TABLE+' '+
+'SET name = ?',
+['nodejs1']
+);
+var query = connection.query(
+'INSERT INTO '+TEST_TABLE+' '+
+'SET name = ?',
+['nodejs2']
+);*/

+ 60 - 0
us.mongodb.js

@@ -0,0 +1,60 @@
+//包含mongodb驱动程序
+var mongodb = require("mongodb");
+//mongodb安装位置
+var server = new mongodb.Server('192.168.65.17', 27017, { auto_reconnect: true });
+//指定数据库
+var db = new mongodb.Db('UseStudio_Blog', server, { safe: true });
+
+//打开数据库,console.log('connect');输出调试信息到控制台
+db.open(function (err, db) { if (!err) { console.log('connect'); } else { console.log(err); } });
+
+//选取数据的示例
+exports.select = function (sql, callback) {
+    db.collection('dbo.PBDirectory', { safe: true }, function (err, collection) {
+        //为啥monogodb返回多条数据不是Json。有点想不通,要先转数组,再转json。而选取一条数据好像不用
+        //collection.find(function (err, _json) { callback(_json); });
+        //查找所有数据。
+        //console.log(collection);
+        collection.find().toArray(function (err, _json) { callback(JSON.stringify(_json)); })
+        //根据条件选取数据
+        //collection.find({ "UserDirectoryName": "自然岩壁" }).toArray(function (err, _json) { callback(JSON.stringify(_json)); })
+        //根据条件只选取一条数据。为啥取出来的还不是json,还需要转换为json?mongdb需要改写。
+        //collection.findOne({ "UserDirectoryName": "自然岩壁" }, function (err, _json) { callback(JSON.stringify(_json)); })
+    });
+}
+//存储过程示例
+exports.pro = function (sql, callback) {
+    db.eval("testpro()",function (err, _json) {
+        console.log(_json);
+        callback(JSON.stringify(_json));
+    });
+}
+//存储过程示例,带参数
+exports.testparam = function (sql, callback) {
+    var _param = "自然岩壁";
+    console.log(_param);
+    //eval的参数传递要注意,传递字符用单引号。传递字符变量用'"++"'。有点纠结。不用单引号eval出来是个对象。所以一定要单引号
+    //db.eval("testparam('自然岩壁')", function (err, _json) {
+    db.eval("testparam('"+_param+"')", function (err, _json) {
+        console.log(_json);
+        callback(JSON.stringify(_json));
+    });
+}
+
+
+
+//封装数据库连接,暂时不做。以后再看
+/*BlogProvider = function (host, port, database) {
+    //指定服务器
+    this.server = new mongodb.Server(host, port, { safe: false }, { auto_reconnect: true }, {});
+    //指定数据库
+    this.db = new mongodb.Db(database, this.server);
+    //打开连接
+    this.db.open(function (err, db) { if (!err) { console.log('connect'); } else { console.log(err); } });
+}
+BlogProvider.prototype.proselect = function (sql, callback) {
+db.eval("testpro()", function (err, _json) {console.log(_json);callback(JSON.stringify(_json));});}
+exports.BlogProvider = BlogProvider;*/
+
+
+

+ 76 - 0
usexpressmain.js

@@ -0,0 +1,76 @@
+
+var us = {}; //注册命名空间。
+//----------------------------------------引用包含系统模块---------------------------------
+us.http = require('http'); //引用包含http处理类
+us.querystring = require("querystring"); //引用获取参数类
+us.url = require("url"); //引用url地址处理类
+//-----------------------------------------引用包含用户模块---------------------------------
+us._usdb = require('./us.db.js'); //包含另外一个文件
+us.mongodb = require('./us.mongodb.js'); //引用mongodb数据库文件
+
+
+//-------------------引入express模块,如果此处出错,请确认express已安装,------------------
+//而且express在环境变量NODE_PATH目录中
+var express = require('express');
+//创建web服务
+var app = express();
+//以当前目录下的demo目录为web应用根目录
+app.use(express.static(__dirname + '/'));
+//显示错误信息,以方便调试
+app.use(express.errorHandler({
+    showStack: true,
+    dumpExceptions: true
+}));
+
+app.all("*", function (req, res) {
+    //备注:res.writeHead(200, {'Content-Type': 'text/plain'});//英文编码
+    //备注:传递表单需要添加,'application/x-www-form-urlencoded'
+    //备注:Access-Control-Allow-Origin解决ie10跨域,还未完全其他跨域,如chrome等,需要进一步完善。
+    //备注:"Content-Type": "text/html;charset=utf-8"解决nodejs连接mysql中文编码问题
+    //备注:'Access-Control-Allow-Origin': '*'  解决nodejs  Access-Control-Allow-Origin不允许跨域调用的问题。现在用端口有这个问题,以后需要移除。
+    //console.log("ok");没有调试模式,只能用这个输出错误。
+    //下面的头查了大概1周时间,必须这样写。
+    res.writeHead(200, { "Content-Type": "text/html;application/json;charset=utf-8", 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With' });
+
+    debugger;
+    //nodejs接收参数也要异步,编程起来就有点麻烦了,注意产生闭包情况。
+    //NodeJS引擎中许多对象都有预定的事件,如用户在发送http请求之后获得的http.ServerRequest对象就有data和end两个事件,
+    //其中data指接收到响应信息正文中的一部分时会触发此事件,end指完全接收完信息后都会触发一次。开发人员如果想处理响应,则需要注册回调函数
+    //on('data') 事件   只有post 请求才能触发,由于1473都是post,所以研究这一块,传统的get方式是不一样的。
+    var params = '';
+    //获取参数中
+    req.on('data', function (chunk) { params += chunk; });
+    //获取参数结束。
+    req.on('end', function () {
+        //querystring.parse可以把形如mode=select&test=1111的字符串拆分成一个json对象,不过这个对象很奇怪,直接输出这个对象会报错
+        var _postJson = us.querystring.parse(params);
+        console.log(_postJson);
+        //只能通过以下方式获取其中的值。这就有一定的局限性。。还需要研究。
+        var _mode = _postJson.mode; //前台传递进来的插入删除等模式
+        var _usjson = _postJson.usjson; //前台传递进来的参数
+        switch (_mode) {
+            case "select":
+                //访问mysql数据库
+                us._usdb.aaaaaa(function (results) { res.end(results); });
+                //us._usdb.usproselect("CALL PB_Select();", function (results) { res.end(results); });
+                //访问mongodb数据库
+                //us.mongodb.select("aaaaatest", function (results) { res.end(results); });
+                //访问mongodb存储过程
+                //us.mongodb.pro("test", function (results) { res.end(results); });
+                //us.mongodb.testparam("ttt", function (results) { res.end(results); });
+                break;
+            case "insert": res.end(_usjson); break;
+            default: res.end("default 1473"); break;
+        }
+        //res.end(_mode);
+    });
+    //备注第一个参数为构建连接字符串,第二个参数为异步查询数据库结束后调用的回调函数
+    //_usdb.usselect('SELECT * FROM ' + 'PBDirectory ' + 'limit 10', function (results) {if (results === 'false') { throw Error; } else { res.end(results);}});//加错误处理
+    //_usdb.usselect('SELECT * FROM ' + 'PBDirectory ' + 'limit 10', function (results) { res.end(results);});\
+    //res.end("\n node js end! ");
+});     
+
+//启动express web服务,监听8080端口
+app.listen(1337);
+
+console.log('UseStudio Nodejs Express is Listening on http://nodejs.1473.cn:1337/:'); //提示

+ 58 - 0
usmain.js

@@ -0,0 +1,58 @@
+var us = {}; //注册命名空间。
+//----------------------------------------引用包含系统模块---------------------------------
+us.http = require('http');//引用包含http处理类
+us.querystring = require("querystring"); //引用获取参数类
+us.url = require("url"); //引用url地址处理类
+//-----------------------------------------引用包含用户模块---------------------------------
+us._usdb = require('./us.db.js'); //包含另外一个文件
+us.mongodb = require('./us.mongodb.js'); //引用mongodb数据库文件
+
+//----------------------------------------接受http请求--------------------------------------
+us.http.createServer(function (req, res) {
+    //备注:res.writeHead(200, {'Content-Type': 'text/plain'});//英文编码
+    //备注:传递表单需要添加,'application/x-www-form-urlencoded'
+    //备注:Access-Control-Allow-Origin解决ie10跨域,还未完全其他跨域,如chrome等,需要进一步完善。
+    //备注:"Content-Type": "text/html;charset=utf-8"解决nodejs连接mysql中文编码问题
+    //备注:'Access-Control-Allow-Origin': '*'  解决nodejs  Access-Control-Allow-Origin不允许跨域调用的问题。现在用端口有这个问题,以后需要移除。
+    //console.log("ok");没有调试模式,只能用这个输出错误。
+    res.writeHead(200, { "Content-Type": "text/html;charset=utf-8", 'Access-Control-Allow-Origin': '*' });
+    debugger;
+
+    //nodejs接收参数也要异步,编程起来就有点麻烦了,注意产生闭包情况。
+    //NodeJS引擎中许多对象都有预定的事件,如用户在发送http请求之后获得的http.ServerRequest对象就有data和end两个事件,
+    //其中data指接收到响应信息正文中的一部分时会触发此事件,end指完全接收完信息后都会触发一次。开发人员如果想处理响应,则需要注册回调函数
+    //on('data') 事件   只有post 请求才能触发,由于1473都是post,所以研究这一块,传统的get方式是不一样的。
+    var params = '';
+    //获取参数中
+    req.on('data', function (chunk) { params += chunk; });
+    //获取参数结束。
+    req.on('end', function () {
+        //querystring.parse可以把形如mode=select&test=1111的字符串拆分成一个json对象,不过这个对象很奇怪,直接输出这个对象会报错
+        var _postJson = us.querystring.parse(params);
+        console.log(_postJson);
+        //只能通过以下方式获取其中的值。这就有一定的局限性。。还需要研究。
+        var _mode = _postJson.mode; //前台传递进来的插入删除等模式
+        var _usjson = _postJson.usjson; //前台传递进来的参数
+        switch (_mode) {
+            case "select":
+                //访问mysql数据库
+                us._usdb.aaaaaa(function (results) {res.end(results); });
+                //us._usdb.usproselect("CALL PB_Select();", function (results) { res.end(results); });
+                //访问mongodb数据库
+                //us.mongodb.select("aaaaatest", function (results) { res.end(results); });
+                //访问mongodb存储过程
+                //us.mongodb.pro("test", function (results) { res.end(results); });
+                //us.mongodb.testparam("ttt", function (results) { res.end(results); });
+                break;
+            case "insert": res.end(_usjson); break;
+            default: res.end("default 1473"); break;
+        }
+        //res.end(_mode);
+    });
+    //备注第一个参数为构建连接字符串,第二个参数为异步查询数据库结束后调用的回调函数
+    //_usdb.usselect('SELECT * FROM ' + 'PBDirectory ' + 'limit 10', function (results) {if (results === 'false') { throw Error; } else { res.end(results);}});//加错误处理
+    //_usdb.usselect('SELECT * FROM ' + 'PBDirectory ' + 'limit 10', function (results) { res.end(results);});\
+    //res.end("\n node js end! ");
+}).listen(1337, "nodejs.1473.cn");
+console.log('Server running at http://nodejs.1473.cn:1337/');
+//上面2行代码必须转换为域名,否则会跨域错误