NodeJS提交表单存数据库

来源:互联网 发布:175凌波城输出数据 编辑:程序博客网 时间:2024/04/27 19:19

NodeJS提交表单

index.html

<!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-Control-Allow-Origin:*"); //*表示允许任何域向我们的服务端提交请求

header("Access-Control-Allow-Origin:http://www.test.com");//只允许指定的域

(NodeJS环境)

res.setHeader("Access-Control-Allow-Origin","*");


执行时,可能提示cannot find moudle 'mysql',请在项目目录下安装mysql模块即可:npm install mysql

0 0
原创粉丝点击