NodeJS提出フォーム保存データベース

5071 ワード

NodeJS提出フォーム
index.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="css/reset.css" />
<link rel="stylesheet" href="css/index.css" />
<title></title>
</head>
<body>
<form>
	<ul>
		<li>
			<label>  :</label>
			<input type="text" name="name" id="name" />
		</li>
		<li>
			<label>  :</label>
			<input type="text" name="sex" id="sex" />
		</li>
		<li>
			<label>  :</label>
			<input type="text" name="age" id="age" />
		</li>
		<li>
			<label>  :</label>
			<input type="text" name="tel" id="tel" />
		</li>
		<li>
			<input type="button" value="  " id="ok_btn" />
		</li>
	</ul>
</form>
<script src="js/jquery-1.8.3.min.js"></script>
<script>
$('#ok_btn').on('click',function(){
	var name = $.trim($('#name').val()),
		sex = $.trim($('#sex').val()),
		age = $.trim($('#age').val()),
		tel = $.trim($('#tel').val()),
		data = {name : name,sex : sex,age : age,tel : tel};
	$.ajax({
		type : 'POST',
		url : 'http://localhost:1337/',
		data : data,
		success : function(data){
			console.log(data);
		}
	})
})
</script>
</body>
</html>
server.js
テストデータベースはtestライブラリのuserテーブルで、フィールドはid、name、sex、age、telです.
var http = require('http');
var querystring = require('querystring');
var mysql = require('mysql');

//        
var server = http.createServer(function(req,res){
	if(req.url !== 'favicon.ico'){
		var params;
		req.on('data',function(data){
			//  querystring    parse           
			params = querystring.parse(decodeURIComponent(data));
		})
		req.on('end',function(){
			console.log('              ');
			connect(params);
		})
		//  Access-Control-Allow-Origin      
		res.setHeader('Access-Control-Allow-Origin','*');
		//  JSON  
		res.writeHead(200,{'Content-Type' : 'application/json'});
		res.end(JSON.stringify({status : 1}));
	}
}).listen(1337,'127.0.0.1');

server.on('error',function(e){
	if(e.code == 'EADDRINUSE'){
		console.log('            ');
	}
})
//          1  
server.setTimeout(60*1000,function(socket){
	console.log('     ');
	console.log(socket);
})
server.on('close',function(){
	console.log('      ');
})

//     
function connect(params){
	var connection = mysql.createConnection({
		host : 'localhost',
		port : 3306,
		database : 'test',
		user : 'root',
		password : ''
	});	
	connection.connect(function(err){
		if(err){
			console.log(' mysql         ');
		}else{
			console.log(' mysql         ');
			connection.query('insert into user set ?',{
				name : params.name,
				sex : params.sex,
				age : params.age,
				tel : params.tel
			},function(err,result){
				if(err){
					console.log('      ');
				}else{
					console.log('      ');
					connection.end();
				}
			})
		}
	})
}
接続池を使ってデータベースに接続する
//          
var pool = mysql.createPool({
	host : 'localhost',
	port : 3306,
	database : 'test',
	user : 'root',
	password : ''
});
function connect(params){
	pool.getConnection(function(err,connection){
		if(err){
			console.log(' mysql         ');
		}else{
			console.log(' mysql         ');
			connection.query('insert into user set ?',{
				name : params.name,
				sex : params.sex,
				age : params.age,
				tel : params.tel
			},function(err,result){
				if(err){
					console.log('      ');
				}else{
					console.log('      ');
					//           ,         
					connection.release();
					//     
					//pool.end();
				}
			})
		}
	})
	//                
	pool.on('error',function(err){
		if(err.code === 'PROTOCOL_CONNECTION_LOST'){
			console.log(' mysql          ');
			//3           
			setTimeout(function(){
				connect();
			},3000);
		}else{
			throw err;
		}
	})
}
テスト:
プロジェクトをサーバー環境に置いて、nodeはserver.jsを実行して、フォームを提出すればいいです.
注意:クロスドメイン問題のため、CORSソリューションを使用します.
JSONPは伝送データ量が大きいので、POST方式で提出する必要があります.CORS技術(ドメイン間リソース共有)を使用します.
CORSはドメインをまたいでアクセスするメカニズムを定義し、ドメイン上のネットワークアプリケーションが別のドメインにドメインをまたぐAJAX要求を提出することができます.サーバーから応答ヘッダを送信すればいいです.
例:(PHP環境)
header(「Access-Coontrol-Alllow-Origin:*」);何をしてもいいですか?サービスにお願いします.
header(「Access-Coontrol-Alllow-Origin:http://www.test.com)///指定されたドメインのみ許可します.
(NodeJS環境)
res.set Header(「Access-Coontrol-Origin」、「*」)
実行時、cannot find moudle'mysqlを提示することができます.プロジェクトディレクトリの下にmysqlモジュールをインストールしてください.