Node.js學習(一) - Node.js + MongoDB

Node.js學習(一) - Node.js + MongoDB

最近有專案需要用Node.js寫API,資料庫是MongoDB

已經配了一臺有裝Node.js及MongoDB的虛擬主機,

而我需要寫API放上去,

那這時,我要學的東西如下,

一、用Node.js寫一個Web Server

二、Node.js連接到MongoDB

三、Node.js + MongoDB的基本新增、修改、刪除、查詢

四、MongoDB的指令

五、取得Post到API的資料

六、輸出JSON文件

-------------------

如果以上皆完成,應該就可以一日速成API撰寫

一、用Node.js寫一個Web Server

var http = require('http'); 

http.createServer(function (req, res) {  	
	router(req,res);	
}).listen(port);

function router(req,res) {
	var url = req.url;	
	var dirs = url.split('/');
	var html = '';
	html = 'Not Found';
	console.log('Node.js web server get request '+ url); 
	
	switch(dirs.length) {
		case 0:
		case 1:
			reponse_html(res,html);
			break;
		default:
			var pro = dirs[1];
			//API撰寫
			if(pro==''){
				callback_default(req,res);
			} else if(pro=='api'){//API 
				get_post(req,res,function(postData){
					callback_api(req,res,postData);
				});						
			} else {//Not Found
				reponse_html(res,html);				
			}
			break;			
	}
}

二、Node.js連接到MongoDB

要連接MongoDB,需要裝npm去裝node.js mongodb drier

需要先下指令,安裝npm

sudo apt-get install npm

安裝最新版npm

sudo npm install npm@latest - g

//安裝mongodb driver

npm install mongodb -g

將mongodb 的library連結到自己正在寫的node.js目錄底下

cd /var/node/

npm link mongodb

三、Node.js + MongoDB的基本新增、修改、刪除、查詢

再來撰寫node.js與mongodb的串接

連接

const mongo = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017/YouDBName";

mongo.connect(conn_url, function (err, client) {
   if(err) {
      throw err;
   }
});

新增

collection.insertOne(obj, (err, result) => {
	if (err) {
		throw err;
	}
					
	var ok = result.result.ok;
	client.close();
});

搜尋

collection.find({}).sort( { CreateTime: -1 } ).skip(PageSize*PageIndex - PageSize).limit(PageSize).toArray((err, items) => {
	if (err) {
		client.close();
		throw err;
	}
    client.close();
});

計數

collection.find({}).count(function(err,count){
	if (err) {
		client.close();
		throw err;
	}						

	client.close();
});

刪除

collection.remove({},function(err,result){
	if (err) {
		client.close();
		throw err;
	}
	client.close();
});

四、MongoDB的指令

為了觀察是否有輸入

在Linux輸入mongo 進入mongodb server

show dbs //顯示所有db

use databaseName  //使用某個database

show collections //顯示所有table

db //顯示目前使用的database

五、取得Post到API的資料

因為我撰寫的是api,傳過來的資料,會是json格式,

所以如何取得,並轉換成josn物件呢?如下

var querystring = require('querystring');

function get_post(req,res,callback){
	req.setEncoding('utf-8');
	var postData = '';		  
	req.addListener("data", function (postDataChunk) {
		postData += postDataChunk;
	});		  
	req.addListener("end", function () {
		var params = [];
		if(req.headers['content-type']=='application/json') {
			params = JSON.parse(postData);
		} else {
			params = querystring.parse(postData);	
		}
		callback(params);
	});	
}

六、輸出JSON文件

那要怎麼輸出JSON文件呢?如下

function reponse_json(res,result){
	var ContentType = 'application/json'; 
	var StatusCode = 200;
	res.writeHead(StatusCode,{'Content-Type':ContentType});
	res.write(JSON.stringify(result));
	res.end();	
}