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×tamp=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端口號