你不能錯過的Node.js範例 (一)

使用 require 命令載入模組的方法
//載入核心模組 'http'
var http = require('http');

//載入自訂模組 circle
var circle = require ('./ch02.module-file-circle.js');
使用 exports 命令輸出物件
exports.area = function(r) {
return PI*r*r;
};

⬆這段程式碼使用 exports命令輸出一個 area方法,用於計算圓面積。


  使用 async 流程庫的方法
async.series([
function (callback) {
callback(null, 'hello');
},
function (callback) {
callback(null, 'async');
},
function (callback) {
callback(null, 'series');
}
], function(err, results) {
console.log(results);
});

⬆這段程式碼使用了async流程庫的series方法來控制流程。


初始化 Buffter 物件的方法
var buffter = new Buffer("This is Buffter",  "utf8");

⬆初始化 Buffter 物件的方法,並定義了”utf8″編碼格式。


擷取作業系統資訊的方法
var os = require("os");
var type = os.type();
console.info('目前作業系統類型為:' + type);

var platform = os.platform();
console.info('目前作業系統平台為:' + platform);

費伯納數列   Fibonacci

Fibonacci 數列: F(n) = F(n-1) +F(-2)

console.log("\n");
console.log("------Fibonacci數列應用------");
console.log("\n");
var strFibonacci;
var i=1, j=1, s=i+j;
strFibonacci = "輸出 Fibonacci 數列 >>> 1 1 ";
while(s <=1000) {
strFibonacci = strFibonacci + s + " ";
i = j;
j = s;
s = i + j;
}
console.info(strFibonacci);
console.info("\n");

錯誤與警告提示應用
var fs = require('fs');
var file = './err-warm.txt';
var encoding = 'UTF-8';
fs.readFile(file, encoding, function(err , data) {
if (err) {
console.error("error - \n %s" ,err);
console.warn("warn - \n %s ", err);
}else {
console.log(data);
}
});

階乘運算輸出
console.info("\n");
console.info("-----階乘計算-----");
console.info("\n");
var iNum, iFactorial=1;
var strFactorial;
//從控制台讀取使用者輸入
var readline = require('readline');
var rl = readline.createInterface( {
input: process.stdin,
output: process.stdout
});
rl.question("請輸入階乘運算起始數值:\nn =" , function(iNum) {
strFactorial = iNum + "!= " + factorial(iNum);
console.info(strFactorial);
console.info("\n");
rl.close();
});
function factorial(n) {
if(n>0)
{
if (n == 1)
{
iFactorial = 1;
}
else
{
iFactorial = n * factorial(n-1);
}
}
return iFactorial;
}

模擬一個簡單的控制介面
var readline = require('readline');  //引入模組
rl = readline.createInterface ( //初始化rl
process.stdin,
process.stdout
);
rl.setPrompt('NodeJS>'); //定義控制台的命令提示字元
rl.prompt(); //初始化模擬控制台
rl.on('line', function(line) { //啟動readline模組的line事件
switch(line.trim()) {
case 'name':
console.log('king');
break;
case 'code':
console.log('Node.js!');
break;
case 'time':
console.log('2025!');
break;
default:
console.log('Say what? I might have heard '+ line.trim() +'`');
break;
}
rl.prompt();
}).on('close', function() { //啟動readline模組的close事件
console.log('Have a great day!');
process.exit(0);
});

輸出水仙花數

所謂水仙花數就是一個三位自然數的百位、十位和個位數的立方和。

var m, a, b, c, sum;
for (m=100; m<1000; m++) { //循環判斷100~999整數中的水仙數
a = parseInt(m/100); //計算出百位數
b = parseInt((m-a100)/10); //計算出十位數 c = parseInt(m-a100-b10); //計算個位數 sum = aaa + bbb +cc*c;
if(m == sum) {
console.info("%d", m + "\n");
console.info("百位數" + a );
console.info("十位數" + b );
console.info("個位數" + c +"\n" );
}
}

輸出質數
var i, j, iNum, strPrimeNum;
var bFlag;  //定義該變數,用於標記是否為質數
var readline = require('readline');
var rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout
});
rl.question("Please enter number? ", function(iNum) {
	strPrimeNum = "2";
	for (i=3; i<=iNum; i++)
	{
		bFlag = true;
		for (j=2; j<i; j++)
		{
			if(i%j == 0)  //透過if條件判斷是否滿足質數的條件
			{
				bFlag = false;
				break;
			}
		}
		if (bFlag == true)
		{
			strPrimeNum = strPrimeNum + i + " ";  //將質數儲存在一個字串變數中
		}
	}
	console.log("Prime number > ", strPrimeNum);
	rl.close();
})

列印輸出楊輝三角

楊輝三角,又稱為帕斯卡三角形,是二項式係數在三角形中的幾何排列式係數在三角形中的幾何排列


河內塔(Hanoi) 問題
河內塔(Hanoi)是根據一個古老傳說而形成的數學問題,有3根柱子A、B、C,其中A柱上有N個(N>)穿孔圓盤,圓盤的尺寸由下而上依次變小,要求按下列規則將所有圓盤移至C桿。

規則一:每次只能移動一個圓盤。
規則二:大盤不能疊在小盤上面。
var i, j, k, strLine;
var readline = require('readline');
rl = readline.createInterface(
	process.stdin,
	process.stdout
);
rl.question("Line is:", function(iLine) { //請輸入楊輝三角行數
	strLine = ">";  //輸出楊輝三角第一行
	for (i=1; i<=10*iLine; i++) 
	{
		if (i==5*iLine)
		{
			strLine = strLine+1;
		} else
		{
			strLine = strLine+" ";
		}
	}
	console.info(strLine);
	strLine = ">";  //輸出楊輝三角後續行
	for (j=1; j<=iLine-1; j++)
	{
		for (k=1; k<5*(iLine-j-1); k++)
		{
			strLine = strLine + " ";
		}
		y=1;
		strLine = strLine + FormatNumber(y);
		for (k=1; k<=j; k++)
		{
			y=y*(j-k+1)/k;
			strLine = strLine + FormatNumber(y);
		}
		console.info(strLine);
		strLine = ">";
	}
	rl.close();
});
function FormatNumber(y) {
	var  strL = "";
	if (y<10)
	{
		strL = strL + "    " +y+"    ";
	}
	else if ((y>=10) && (y<100))
	{
		strL = strL + "    " +y+"    ";
	}
	else if (y>=100)
	{
		strL = strL + "    " +y+"    ";
	}
	return strL;
}

簡單四則運算應用
var a, b, sign, summary;
console.info("Calculate start!");
/*
* 模擬一個控制台輸入介面
* @type (exports)
 */
var readline = require('readline');
rl = readline.createInterface(
	process.stdin,
	process.stdout
);
rl.setPrompt('Calculate>');
rl.prompt();
a = Math.round(Math.random() * 100);
b = Math.round(Math.random() * 100);
sign = Math.round(Math.random() * 3);
summary = switchSign(a, b, sign);
rl.on('line', function(line) {
	if(line.trim() == summary) {
		console.info("answer is right!");
	} else {
		console.info("answer is error! The correct answer is " + summary + ".");
	}
	rl.prompt();
	a = Math.round(Math.random() * 100);
	b = Math.round(Math.random() * 100);
	sign = Math.round(Math.random() * 3);
	summary = switchSign(a, b, sign);
}).on('close', function() {
	console.log('Calculate exits!');
	process.exit(0);
})
/*四則運算;方法 - switchSign()
* @param a
* @param b
* @param sign - 運算子
* @param {*}
*/
function switchSign(a, b, sign) {
	var c;
	switch(sign) {
		case 0:
			c = a + b;
			console.info(a + "+" + b + "=");
			break;
		case 1:
			c = a - b;
			console.info(a + "-" + b + "=");
			break;
		case 2:
			c = a * b;
			console.info(a + "*" + b + "=");
			break;
		default:
			c = a + b;
			console.info(a + "+" + b + "=");
			break;
	}
	return c;
}

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料