Nodejs Web应用基础开发实例(五)-MySQL数据库

Nodejs Web应用基础开发实例(五)-MySQL数据库

循序渐进地通过几个实例展示如何通过Nodejs实现Web数据库应用的开发:

  1. 实例一:建立简单的HTTP服务器
  2. 实例二:建立静态HTML页面Web服务器
  3. 实例三:改进的静态页面Web服务器
  4. 实例四:使用express框架建立web服务器
  5. 实例五:访问mysql数据库-查询

实例五:访问MySQL数据库-查询

实例四实现了一个可以访问静态页面的Web站点,本实例在此基础上增加数据库访问的功能,可以向前端用户提供查询数据库的API,用于开发Web数据库应用。
首先要安装mysql数据库驱动,在命令窗口使用以下命令进行安装:

npm install mysql

一、在服务端建立Web服务器和数据库访问API

  1. 创建js文件并参考实例四实现Web服务器,在此基础上补充mysql数据库查询的代码,如下:
var express = require('express');
var app = express();
var mysql = require('mysql');

//设置静态资源目录public
app.use(express.static(__dirname + '/public'));

//创建mysql数据库访问连接(数据库主机地址,用户名和密码,数据库名称根据情况自行修改)
var connection = mysql.createConnection({
	host: 'localhost',
	user: 'root',
	password: '123456',
	database: 'test'
});
//连接数据库
connection.connect();

//允许跨域访问,可以从不同主机调用API
app.all('*',function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Accept,Content-Type,Content-Length, Authorization,X-Requested-With ');
  res.header('Access-Control-Allow-Methods', 'POST,GET,PUT,DELETE,OPTIONS');
 
  if ('OPTIONS' == req.method) {
    res.send(200); //让options请求快速返回
  }
  else {
    next();
  }
});

//定义查询全部记录的API为“/all”;回调函数 function(req, res)处理用户请求并响应
app.get('/all', function(req, res) {
	//采用数据库连接对象的query方法执行sql语句'SELECT * from stu';
	//查询完成后执行回调函数function(error, results, fields)对查询结果进行处理;
	//其中查询结果保存在参数results中,如果查询无差错,则通过响应对象res的send方法将结果以JSON数据格式返回给浏览器。此处需要前端根据JSON数据格式来处理。
	connection.query('SELECT * from stu', function(error, results, fields) {
		if (error) throw error;
		res.send(results);
	});

});

//根据用户请求中的参数查询特定用户名的记录,定义API为“/list”,参数为name(参数名可以根据自身情况定义),
//前端发来的用户请求应该为“主机名:端口号/list?name=*** ”,
app.get('/list', function(req, res) {
	//此处可以用请求对象req的query.username属性获取用户请求中username参数的值
	var username=req.query.username;
	//用获取到的参数值name构造完整的sql查询语句
	connection.query('SELECT * from stu where username= "'+username+'"', function(error, results, fields) {
		if (error) throw error;
		res.send(results);
	});
});

var server = app.listen(8000, 'localhost',function() {
	var host = server.address().address;
	var port = server.address().port;
	console.log("应用实例,访问地址为 http://%s:%s", host, port);
})

二、编写前端HTML页面代码,调用API访问数据库

在此之前可以先在浏览器地址栏中输入API的URL,测试一下访问结果。例如输入:http://127.0.0.1:8000/all 或者 http://127.0.0.1:8000/list?name=zhou ,观察返回的JSON数据结果。
然后可以新建一个HTML文件,写入如下代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>根据用户请求查询后台数据库记录</title>
		<!--解决node提示favicon.ico图标文件不存在的问题-->
		<link rel="shortcut icon" href="#" />
		<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
		</script>
		<script>
			$(document).ready(function() {
				
				//在前端页面容器中添加查询到的记录record
				function show(record){
					var p1=$("<p></p>").text("姓名:"+record.name);
					$("#box").append(p1);
					var p2=$("<p></p>").text("年龄:"+record.age);
					$("#box").append(p2);
					$("#box").append("<hr>");
				};
				
			//单击查询全部按钮后,通过JQuery Ajax访问查询全部记录API
				$("#all").click(function(){
					$("#box").empty();
					$.get(
					"http://127.0.0.1:8000/all",
					function(data){		//回调函数,处理查询结果data,逐条调用show函数在前端显示
						for(var i=0;i<data.length;i++){
							console.log(data[i]);
							show(data[i]);
						}
					});
				});
				
				//单击查询按钮后,根据用户在文本框中输入的用户名查询数据库中的特定记录								
				$("#list").click(function(){
					$("#box").empty();
				    var username = $("#username").val();
					$.get(
					"http://127.0.0.1:8080/list",
					{
						username:username
					},
					function(data){
						for(var i=0;i<data.length;i++){
							console.log(data[i]);
							show(data[i]);
						}
					});
				});				
			});
		</script>
	</head>
	<body>
		<p>用户名: <input type="text" id="username" value=""></p>
		<button id="list">查询</button>
		<button id="all">查询全部</button>
		<div id="box">

		</div>

	</body>
</html>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值