Node代碼片段

Node與Mysql交互

采用node-mysql開源項目作為Node框架的MySQL擴(kuò)展庫包括以下方面:

1. 連接MySQL數(shù)據(jù)庫操作
2. 查詢MySQL數(shù)據(jù)庫操作
3. 修改MySQL數(shù)據(jù)庫操作
4. 插入MySQL數(shù)據(jù)庫操作
5. 刪除MySQL數(shù)據(jù)庫操作
6. MySQL數(shù)據(jù)庫連接池

連接MySQL數(shù)據(jù)庫操作

console.info("------  mysql connetion()  ------");
console.info();
var http = require("http");  // 引入HTTP模塊
var mysql = require("/usr/local/lib/node_modules.mysql");  // 引入mysql模塊
console.log("Now start HTTP server on port 6868...");
console.info();
/**
  * 創(chuàng)建數(shù)據(jù)庫連接
  */
var connection = mysql.createConnection({
  host: "localhoset",  // 主機(jī)地址
  user: "root",  // 數(shù)據(jù)庫用戶名
  password: "root",  // 數(shù)據(jù)庫密碼
  database: "nodejs",  // 數(shù)據(jù)庫名稱
  port: 3306  // 端口號
});

/**
  * 創(chuàng)建HTTP服務(wù)器
  */
http.createServer(function(req, res) {
  res.writeHead(200, {"Content-Type": "text/html;charset=utf8"});
  res.write("<h3>測試 Node.js-MySQL 數(shù)據(jù)庫;連接!</h3><br/>");
  /**
    * 測試數(shù)據(jù)庫連接
    */
  connection.connect(function(err) {
    if(err) {
      res.end("<p>Error Connected to MySQL!</p>");
      return;
    } else {
      res.end('<p>Connected to MySQL!</p>');
    }
  });

}).listen(6868);  // 監(jiān)聽6868端口號

查詢MySQL數(shù)據(jù)庫操作

console.log("------ mysql query() ------");
console.info();
var http = require("http");  // 引入HTTP模塊
var mysql = require("/usr/local/lib/node_modules/mysql");  //引入mysql模塊
// ......省略12行代碼見上代碼塊對應(yīng)部分
/**
  * 創(chuàng)建HTTP服務(wù)器
  */
  http.createServer(function(req, res) {
    connection.query("select * from userInfo;", function(error, rows, fields) {
      res.writeHead(200, {"Content-Type":text/html;charset=utf8"});
      res.write("<h3>測試 Node.js-MySQL 數(shù)據(jù)庫查詢操作</h3><br/>");
      res.end(JSON.stringify(rows));
    });
  }).listen(6868);  // 監(jiān)聽6868端口號

插入MySQL數(shù)據(jù)庫操作

console.log("------ mysql insert() ------");
console.info();
var http = require("http");  // 引入HTTP模塊
var mysql = require("/usr/local/lib/node_modules/mysql");  //引入mysql模塊
//......此處省略連接數(shù)據(jù)庫代碼,可參考本章節(jié)
  connection.query('insert into userinfo(id, name, pwd) values(7, "genius", "12345678");', 
    function(errorinsert, resinsert) {
      if(errorinsert)  console.log(errorinsert);
      console.log("INSERT Return ==> ");
      console.log(resinsert);
    }
  );
//......此處省略連接數(shù)據(jù)庫代碼,可參考本章節(jié)

刪除MySQL數(shù)據(jù)庫操作

console.log("------ mysql delete() ------");
console.info();
var http = require("http");  // 引入HTTP模塊
var mysql = require("/usr/local/lib/node_modules/mysql");  //引入mysql模塊
//......此處省略連接數(shù)據(jù)庫代碼,可參考本章節(jié)
  connection.query('delete from userinfo where id=7;', function(errordelete, resdelete) {
    if(errordelete) console.log(errordelete);
    console.log("DELETE Return ==>");
    console.log(resdelete);
  });
//......此處省略連接數(shù)據(jù)庫代碼,可參考本章節(jié)

更新MySQL數(shù)據(jù)庫

console.log("------ mysql update() ------");
console.info();
var http = require("http");  // 引入HTTP模塊
var mysql = require("/usr/local/lib/node_modules/mysql");  //引入mysql模塊
//......此處省略連接數(shù)據(jù)庫代碼,可參考本章節(jié)
  connection.query('update userinfo set pwd="87654321" where pwd="12345678";', 
    function(errorupdate, resupdate) {
      if(errorupdate) console.log(errorupdate);
      console.log("Update Return ==>");
      console.log(resupdate);
    }
  );
//......此處省略連接數(shù)據(jù)庫代碼,可參考本章節(jié)

操作MySQL數(shù)據(jù)庫連接池

console.log("------ mysql pool() ------");
console.info();
var http = require("http");  // 引入HTTP模塊
var mysql = require("/usr/local/lib/node_modules/mysql");  //引入mysql模塊
//......省略12行代碼,見建立數(shù)據(jù)連接部分
/**
  * 創(chuàng)建HTTP服務(wù)器
  */
  http.createServer(function(req, res) {
  /**
    * 獲取數(shù)據(jù)庫連接池
    */
  pool.getConnection(function(err, conn) {
    if(err) {
      console.log("POOL ==> " + err);
      console.log();
    }
    /**
      * 定義SQL查詢語句
      * @type {string}
      */
    var selectSQL = 'select * from userinfo';
    /**
      * 執(zhí)行數(shù)據(jù)查詢操作
      */
      conn.query(selectSQL, function(err, rows) {
        if(err) {
          console.log(err);
          console.log();
        }
        console.log("SELECT ==> ");
        for(var i in rows) {
          console.log(rows[i]);
        }
        conn.release();  // 釋放數(shù)據(jù)庫連接
        res.writeHead(200, {"Content-Type": "text/html;charset=utf8"});
        res.write("<h3>測試 Node.js  - MySQL 數(shù)據(jù)庫連接池操作!</h3><br/>");
        res.end(JSON.stringify(rows));
      });
    });
  }).listen(6868);  // 監(jiān)聽6868端口號

Node異步I/O與Async流程控制庫

1. Node框架異步I/O機(jī)制
2. Node框架異步I/O應(yīng)用
3. Async流程控制庫

Node框架異步I/O機(jī)制基礎(chǔ)

console.inf("/n");
console.info('------ Node異步編程:基礎(chǔ)初步! ------');
console.inf("/n");
// 使用setTimeout()異步方法初探異步機(jī)制
setTimeout(function() {
  console.log('async - print it now');  // 在回調(diào)函數(shù)內(nèi)輸出信息
}, 3000);
console.log("asyn - print it 3 second later!");  // 異步方法后輸出信息
console.inf("/n");
console.inf("------ Node異步編程 ------");
console.inf("/n");

Node框架異常捕獲機(jī)制

console.info('------ Node異步編程:異常捕獲! ------');
setTimeout(function() {
  try {
    var data = b/0;  //錯誤的計算
  } catch(e) {
    console.log(e);
  }
}, 1000);
console.info();

Async串行流程控制

console.info('------ Node異步編程:Async series Array');
console.info();
var async = require("async"); // 引用'async'包
/**
  * 使用series函數(shù)方法
  */
async.series([
  function(callback) {
    callback(null, 'hello');
  },
  function(callback) {
    callback(null, 'async');
  },
  function(callback) {
    callback(null, 'series');
  }
], function(err, results) {
  console.log(results);
});
console.info();
console.info('------ Node異步編程:Async series ------');
console.info('------ Node異步編程:Async series Json ------');
console.info();
var async = require('async');  // 引用'async'包
/**
  * 使用series函數(shù)方法
  */
async.series({
  one: function(callback) {
    callback(null, "hello");
  },
  two: function(callback) {
    callback(null, "async");
  },
 three: function(callback) {
    callback(null, "series");
  },
}, function(err, results) {
    console.log(results);
});
console.info();
console.info('------ Node異步編程: Async series Json ------');
說明:在應(yīng)用Async流程控制庫過程中,async.series()函數(shù)完全嚴(yán)格按照串行執(zhí)行的,它完成的是同步操作的功能。

Async瀑布模式流程控制(串行)

console.info('------ Node異步編程:Async waterfall ------');
console.info();
var async = require('async');  // 引用'async'包
/**
  * 使用waterfall函數(shù)方法
  */
async.waterfall([
  function(callback) {
    // 回調(diào)函數(shù)的第一個參數(shù)為非空值時,waterfall會停止執(zhí)行剩余任務(wù)
    callback(null, 1);
  },
  function(data, callbackl) {
    console.info(data);
    callback(‘test’, 2);
  },
  function(data, callback) {
    console.info(data);
    callback(null, 3);
  }
], function(err, results) {
  console.log(results);
});
console.info();
console.info('------ Node異步編程:Async waterfall ------');

Async并行流程控制

console.info('------ Node異步編程:Async parallel ------');
console.info();
var async = require('async');  // 引用'async'包
/**
  * 使用parallel函數(shù)方法
  */
  async.parallel([
    function(callback) {
      setTimeout(function() {
        callback(null, 'one');  
      }, 2000);
    },
    function(callback) {
      setTimeout(function() {
        callback(null, 'two');  
      }, 1000);
    }
  ],
  function(err, results) {
    console.log(results);
  });
  console.info();
  console.info('------ Node異步編程:Async parallel ------');

Async限制性并行流程控制

console.info('------ Node異步編程:Async parallelLimit ------');
console.info();
var async = require('async');  // 引用'async'包
/**
  * 使用parallelLimit函數(shù)方法
  */
async.parallelLimit([
  function(callback) {
    setTimeout(function() {
      callback(null, 'one');
    }, 1000);
  },
   function(callback) {
     setTimeout(function() {
        callback(null, 'two');
      }, 1000);
  }
],
1,
function(err, results) {
  console.log(results);
));
console.info();
console.info('------ Node異步編程:Async parallelLimit ------');

Async循環(huán)流程控制

console.info('------ Node異步編程:Async whilst ------');
console.info();
var async = require('async');
var count = 0;
/**
  * Define JSON Array
  * @type {{name:string, age:number}[]}
  */
var list = [
  {name:'Jack', age:20},
  {name:'Lucy', age:18},
  {name:'Jack', age:20},
  {name:'Lucy', age:18},
  {name:'Lucy', age:18}
];
async.whilst() {
  function() {
    return count < 5;
  },
  function(callback) {
    console.log(count);
    list[count].age += 1;
    count++;
    setTimeout(callback, 1000);
  },
  function(err) {
    console.log(count);
    console.log(list);
  }
};
console.info();
console.info('------ Node異步編程:Async whilst ------');
console.info('------ Node異步編程:Async doWhilst ------');
console.info();
var async = require('async');
var count = 0;
/**
  * Define JSON Array
  * @type {{name:string, age:number}[]}
  */
var list = [
  {name:'Jack', age:20},
  {name:'Lucy', age:18},
  {name:'Jack', age:20},
  {name:'Lucy', age:18},
  {name:'Lucy', age:18}
];
async.doWhilst{
  function(callback) {
    console.log(count);
    list[count].age += 1;
    count++;
    setTimeout(callback, 1000);
  },
  function() {return count < 5},
  function(err) {
    console.log(list);
  }
};
console.info();
console.info('------ Node異步編程:Async doWhilst ------');

Async隊列流程控制

console.info('------ Node異步編程:Async queue ------');
console.info();
var async = require('async');
/**
  * 定義一個queue,設(shè)worker數(shù)量為2
  */、
var q = async.queue(function(task, callback) {
  console.log('worker is processing task:', task.name);
}, 2);
/**
  * 獨立加入5個任務(wù)
  */
q.push({name: 'foo'}, function(err) {
  console.log('finished processing foo');
});
q.push({name: 'bar'}, function(err) {
  console.log('finished processing bar');
});
q.push({name: 'cap'}, function(err) {
  console.log('finished processing cap');
});
q.push({name: 'egg'}, function(err) {
  console.log('finished processing egg');
});
q.push({name: 'app'}, function(err) {
  console.log('finished processing app');
});
/**
  * listen: 當(dāng)最后一個任務(wù)交給worker時,將調(diào)用該函數(shù)
  */
q.empty = function() {
  console.log('no more tasks waiting');
}
/**
  * listen: 當(dāng)所有任務(wù)都執(zhí)行完以后,將調(diào)用該函數(shù)
  */
q.drain = function() {
  console.log('all tasks have been processed');
}
注意:相對于async.parallel()函數(shù)而言,async.queue()函數(shù)在很多關(guān)鍵點提供了回調(diào)處理,而且pusj新任務(wù)的功能也是async.parallel()函數(shù)所做不到的,由此可見async.queue()函數(shù)的并行處理能力更為強(qiáng)大。

Node Web開發(fā)

圍繞以下方面:

1. HTTP模塊方法與應(yīng)用
2. HTTPS模塊方法與應(yīng)用
3. Express開發(fā)框架應(yīng)用

構(gòu)建一個基本的HTTP服務(wù)器

console.info("------ http - create basic server ------");
console.info();
var http = require('http');  // 引入http模塊
/**
  * 調(diào)用http.createServer()方法創(chuàng)建服務(wù)器
  */
http.createServer(function(req, res){
  /**
    * 通過res.writeHeader()方法寫HTTP文件頭
    */
  res.writeHeader(200, {'Content-type' : 'text/html'});
  /**
    * 通過res.write()方法寫頁面內(nèi)容
    */
  res.write('<h3>Node.js-HTTP</h3>');
   /**
    * 通過res.end()方法發(fā)送響應(yīng)狀態(tài)碼,并通知服務(wù)器消息完成
    */
    res.end('<p>Create Basic HTTP Server</p>');
}).listen(6868);  // 監(jiān)聽6868端口號
說明:當(dāng)?shù)谝淮握{(diào)用response.write()方法時,將會發(fā)送緩存的header信息和第一個報文給客戶端。當(dāng)?shù)诙握{(diào)用response.write()方法時,Node框架假設(shè)用戶將發(fā)送數(shù)據(jù)流,然后分別地進(jìn)行發(fā)送。意味著響應(yīng)是緩存到第一次報文的數(shù)據(jù)塊。如果response.write()方法的所有數(shù)據(jù)被成功刷新到內(nèi)核緩沖區(qū),則返回true。如果所有或部分?jǐn)?shù)據(jù)還處在隊列中,則返回false。當(dāng)緩沖區(qū)再次被釋放時,drain事件會被分發(fā)。

編寫一個簡單的HTTP客戶端

console.info('------ http-create basic client ------');
console.info();
var http = require('http');  // 引入http模塊
/**
  * 定義服務(wù)器參數(shù)字段
  * @type {{hostname: string, port: number, path: string, method: string}}
  */
var options = {
  hostname: 'localhost',  // 定義服務(wù)器主機(jī)地址
  port: 6868,  // 定義服務(wù)器主機(jī)端口號
  path: '/',  // 定義服務(wù)器路徑
  method: 'POST' // 定義服務(wù)器訪問方式
};
/**
  * 通過http.request()方法
  * 由客戶端向HTTP服務(wù)器發(fā)起請求
  */
var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function(chunk) {
    console.log('BODY:' + chunk);
  });
});
/**
  * 監(jiān)聽request對象的'error'事件
  */
req.on('error', function(e) {
  console.log('problme with request: ' + e.message);
});
/**
  * write data to request body
  */
req.write('data/n');
/**
  * write end to request body
  */
req.end();
console.info('------ http - create basic server ------');
console.info();
var http = require('http');  // 引入http模塊
// 調(diào)用http.createServer()方法創(chuàng)建服務(wù)器
http.createServer(function(req, res) {
  // 通過res.writeHeader()方法寫HTTP文件頭
  res.writedHeader(200, {'Content-Type' : 'text/html'}),
  // 通過res.write()方法寫頁面內(nèi)容
  res.write('<h3>Node.js -- HTTP</h3>');
  // 通過res.end()方法響應(yīng)狀態(tài)嗎,并通知服務(wù)器消息完成
  res.end('<p>Create Basic HTTP Server Response to clients request</p>');
}).listen(6868);  // 監(jiān)聽6868端口號
---------------------------------------
####HTTP響應(yīng)狀態(tài)碼
```javascript
console.info("------ http - create basic client ------");
console.info();
var http = require('http');  // 引入http模塊
var querystring = require('querystring');  // 引入Query String模塊
/**
  * 定義響應(yīng)狀態(tài)碼數(shù)據(jù)
  */
var status_codes = new Array();
status_codes[0] = "201";
status_codes[1] = "202";
status_codes[2] = "203";
status_codes[3] = "401";
status_codes[4] = "402";
/**
  * 定義查詢字段
  */
var postData = new Array();
for(var n = 0; n < 5; n++) {
  postData[n] = querystring.stringify({
    statuscodes: status_code[n]
  });
}
/**
  * 模擬HTTP客戶端向HTTP服務(wù)端連續(xù)發(fā)送request請求
  */
for(var i = 0; i < 5; i++) {
/**
  * 定義服務(wù)器參數(shù)字段
  * @type {{hostname: string, port: number, path: string, method: string, headers: {Content-Type: string, Content-Length: *}}}
  */
  var options = {
    hostname: 'localhost',
    port: 6868,
    path: '/' + postData[i],
    method: 'POST',
    header: {
        'Content-Type': 'application/x-www-form-urlencode',
        'Content-Length': postData.length
    }
  };
/**
  * 通過http.request()方法
  *  由客戶端向HTTP服務(wù)器發(fā)起請求
  */
var req = http.requets(options, function(res) {
  console.log('STATUS_CODES:' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  console.info();
  res.setEncoding('utf8');
  res.on('data', function(chunk) {
    console.log('BODY: ' + chunk);
    console.info();
  });
});
/**
  * 監(jiān)聽request對象的'error'事件
  */
req.on(''error', function(e) {
  console.log('problem with request: ' + e.message);
  console.info();
})
/**
  * write data to request body
  */
req.write("/n");
/**
  * write end to request body
  */
req.end();
};
console.info("------ http STATUS_CODES");
console.info();
var http = require('http);  // 引入http模塊
console.log("Now start HTTP server...");
console.info();
/**
  * 調(diào)用http.createServer()方法創(chuàng)建服務(wù)器
  */
http.createServer(function(req, res) {
  var status = req.url,substr(1);  // 獲取url查詢字段
  var status_codes = status.substring(12);  // 獲取HTTP.STATUS_CODES
  // 判斷http.STATUS_CODES響應(yīng)狀態(tài)碼集合是否有效
  if(!http.STATUS_CODES[status_codes]) {
    status_codes = '404';
  }
  // 通過res.writeHeader()方法寫HTTP文件頭
  res.writeHeader(status_codes, {'Content-Type':'text/plain'});
  // 通過res.end()方法發(fā)送響應(yīng)狀碼,并通知服務(wù)器消息完成
  res.end(http.STATUS_CODES[status_codes]);
}).listen(6868);  // 監(jiān)聽6858端口號

設(shè)定和獲取HTTP頭文件

console.log("------ http - server write header ------");
console.info();
/**
  * 調(diào)用http.createServer()方法創(chuàng)建服務(wù)器
  */
http.createServer(function(req, res) {
  /**
    * 通過res.writeHead()方法寫HTTP文件頭
    */
  res.writeHead(200, {
    'Content-Length' : body.length,
    'Content-Type' : ‘text/plain’
  });
  /**
    * 通過res.write()方法寫頁面內(nèi)容
    */
  res.write("Node.js");
  res.write("HTTP");
  /**
    * 通過res.end()方法發(fā)送響應(yīng)狀態(tài)碼, 并通知服務(wù)器消息完成
    */
  res.end();
}).listen(6868);  // 監(jiān)聽6868端口號
console.info("------ http - client write header ------");
console.info();
var http = require('http');  // 引入http模塊
  /**
    * 定義服務(wù)器參數(shù)字段
    * @type {{hostname : string, port : number, path : string, method : string}}
    */
var options = {
  hostname: 'localhost',  // 定義服務(wù)器主機(jī)地址
  port: 6868,  // 定義服務(wù)器主機(jī)端口號
  path: '/',  // 定義服務(wù)器路徑
  method: 'POST'  // 定義服務(wù)器訪問方式
};
/**
  * 通過http.request()方法
  * 由客戶端向HTTP服務(wù)器發(fā)起請求
  */
var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', funcition(chunk) {
    console.log('BODY: ' + chunk);
  });
});
// 監(jiān)聽request對象的'error'事件
req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});
req.write('data/n');
re.end();

發(fā)送與處理GET請求

console.info("------ http - client get ------');
console.info();
var http = require('http');  // 引入http模塊
/**
 * 發(fā)送HTTP GET請求
 */
http.get("http://localhost:6868/signature=12345678&echostr=78787878&timestamp=168",
  /**
   * GET回調(diào)函數(shù)
   * @param res
   */
  function(res) {
    console.log('STATUS: ' + res.statusCode); // 打印輸出Status_Codes響應(yīng)狀態(tài)碼
    console.info();
    /**
     * 監(jiān)聽"data"事件處理函數(shù)
     */
    res.on('data', function(chunk) {
      console.log('BODY:' + chunk);
      console.info();
    });
    console.info();
  }).on('error',
    /**
     * "error"事件回調(diào)函數(shù)
     * @param e
     */
    function(e) {
      console.log("Got error: " + e.message); // 打印出error信息
      console.info();
    }
  );
console.info("------- http - server get ------");
console.info();
var http = require('http'); // 引入http模塊
var url = require('url'); // 引入url模塊
var qs = require('querystring');  // 引入querystring模塊
/**
 * 調(diào)用http.createServer()方法創(chuàng)建服務(wù)器
 */
http.createServer(function(req, res) {
  /**
   * 通過res.writeHeader()方法寫HTTP文件頭
   */
  res.writeHeader(200, {'Content-Type' : 'text/plain'});
  /**
   * 通過url.parese()方法獲取查詢字段
   */
  var query = url.$.parseXML(req.url).query;
  console.info(query);
  console.info();
  /**
   * 通過res.end()方法發(fā)送響應(yīng)狀態(tài)碼,并通知服務(wù)器消息完成
   */
  var qs_parse = qs.$.parseXML(query);
  console.info(qs_parse);
  console.info();
  res.end(JSON.stringify(qs_parse));
}).listen(6868);  // 監(jiān)聽6868端口號

進(jìn)行重定向操作

console.info("------ http - create redirect server A ------");
console.info();
var http = require('http'); // 引入http模塊
console.log('Now start HTTP server on port 6868...');
console.info();
/**
 * 調(diào)用http.createServer()方法創(chuàng)建服務(wù)器
 */
http.createServer(function(req, res) {
  /**
   * 通過res.writeHeader()方法寫HTTP文件頭
   */
  res.writeHeader(301, {
    'Loaction': 'http://localhost:8686'
  });
  /**
   * 通過res.write()方法寫頁面內(nèi)容
   */
  res.write('<h3>Node.js --- HTTP</h3>');
  /**
   * 通過res.end()方法發(fā)送響應(yīng)狀態(tài)嗎,并通知服務(wù)器消息完成
   */
  res.end('<p>Create Redirect HTTP Server on Port 6868!</p>');
}).listen(6868);  // 監(jiān)聽6868端口號
console.info("------ http - create redirect server ------");
console.info();
var http = require('http'); // 引入http模塊
console.log('Now start HTTP server on 8686...');
console.info();
/**
 * 調(diào)用http.createServer()方法創(chuàng)建服務(wù)器
 */
http.createServer(function(req, res) {
  // 通過res.writeHeader()方法寫HTTP文件頭
  res.writeHeader(200, {'Content-type': 'text/html'});
  // 通過res.write()方法寫頁面內(nèi)容
  res.write('<h3>Node.js - HTTP</h3>');
  //  通過res.end()方法發(fā)送響應(yīng)狀態(tài)嗎,并通知服務(wù)器消息完成
  res.end('<p>Create Redirect HTTP Server on Port 8686!</p>');
}).listen(8686);  // 監(jiān)聽8686端口

服務(wù)器多路徑處理方式

console.info("------ http - server pathname ------");
console.info();
var http = require('http'); // 引入http模塊
var url = require('url'); //  引入url模塊
console.log('Now start HTTP server on port 6868...');
console.info();
/**
 * 調(diào)用http.createServer()方法創(chuàng)建服務(wù)器
 */
http.createServer(function(req, res) {
  /**
   * 獲取url.pathname路徑
   * @type{path|*|req.pathname|parseTests.pathname|parseTestWithQueryString}
   */
  var pathname = url.parse(req.url).pathname;
  /**
   * Responding to multi type of request
   */
  if(pathname === '/') {
    /**
     * 通過res.writeHeader()方法寫HTTP文件頭
     */
    res.writeHeader(200, {
      'Content-Type': 'text/plain'
    });
    /**
     * 通過res.end()方法響應(yīng)狀態(tài)碼,并通知服務(wù)器消息完成
     */
    res.end('Home Page/n');
  } else if(pathname === '/about') {
    /**
     * 通過res.writeHeader()方法寫HTTP文件頭
     */
     res.writeHeader(200, {
       'Content-Type': 'text/plain'
     });
     /**
      * 通過res.write()方法寫頁面內(nèi)容
      */
     res.write('Node.js - HTTP/n');
     /**
      * 通過res.end()方法發(fā)送響應(yīng)狀態(tài)碼。并通知服務(wù)器消息完成
      */
     res.end('About Us/n');
  } else if(pathname === '/redirect') {
    /**
     * 通過res.writeHeader()方法寫HTTP文件頭
     */
    res.writeHeader(301, {
      'Location': '/'
    });
    /**
     * 通過res.end()方法發(fā)送響應(yīng)狀態(tài)碼,并通知服務(wù)器消息完成
     */
    res.end();
  } else {
    /**
     * 通過res.writeHeader()方法寫HTTP文件頭
     */
    res.writeHeader(404, {
      'Content-Type': 'text/plain'
    });
    /**
     * 通過res.write()方法寫頁面內(nèi)容
     */
    res.write('Node.js - HTTP/n');
    /**
     * 通過res.end()方法發(fā)送響應(yīng)狀態(tài)碼,并通知服務(wù)器消息完成
     */
    res.end('Page not found/n');
  }
}).listen(6868);  // 監(jiān)聽6868端口號

模擬ping命令連接服務(wù)器

console.info("------ http -client ping ------");
console.info();
var http = require('http'); // 引入http模塊
console.log("Now start ping HTTP server...");
console.info();
var http = require('http'); // 引入http模塊
console.log("Now start ping HTTP server...");
console.info();
/**
 * 定義查詢字段
 */
var options = {
  host: 'localhost',
  port: 6868,
  path: '/'
};

/**
 * 自定義函數(shù) ping_server()
 */
function ping_server() {
  /**
   * 發(fā)送HTTP GET請求
   */
  http.get(options. function(res) {
    if(res.statusCode == 200) {
      console.log("The site is up!");
    }
    else {
      console.log('The site is down!');
    }
  }).on('error', function(e) {
    console.log("There was an error: " + e.message);
  });
}
/**進(jìn)行重定向操作的方法
 * 通過setInterval()方法設(shè)定時間間隔
 */
setInterval(ping_server, 1000);
console.info("------ http - server ping ---");
console.info();
var http = require('http'); // 引入http模塊
console.log("Now start HTTP server...");
console.info();
/**
 * 調(diào)用http.createServer()方法創(chuàng)建服務(wù)器
 */
http.createServer(function(req, res) {
  // 通過res.writeHeader()方法寫HTTP文件頭
  if(Math.round(Math.random())) {
    res.writeHeader(200, {'Content-Type': 'text/html'});
  } else {
    res.writeHeader(404, {'Content-Type': 'text/html'});
  }
  // 通過res.end()方法發(fā)送響應(yīng)狀態(tài)碼,并通知服務(wù)器消息完成
  res.end();
}).listen(6868);  // 監(jiān)聽6868端口號
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,694評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 在知識大爆炸的時代,如何讓我們的閱讀更加高效,更加有針對性是我們每個人都要面臨的問題,有沒有覺得很多時候看到讀完一...
    觴詠閱讀 219評論 1 3
  • By Alan Hankinson 翻譯:百度貼吧ID 吾乃亂臣賊子 與眾不同(1765-1840) 麥克唐納是最...
    Baidu拿破侖吧閱讀 1,609評論 0 1
  • 有些人,一直沒機(jī)會見。等有機(jī)會見了,卻又猶豫了,相見不如不見。 有些事,一別竟是一輩子,一直沒機(jī)會做。等有機(jī)會了,...
    亞茹_我是阿茹閱讀 143評論 1 0

友情鏈接更多精彩內(nèi)容