您的位置:首页 > 数据库 > MySQL

(原创)node.js入门之二:mysql的使用-Mac环境开发

2015-12-30 15:51 921 查看

本文地址:http://blog.csdn.net/z040145/article/details/50425562

0:开篇废话

上一章手把手跟大家完成了Mac环境下nodejs的安装,以及webstorm的安装和使用,我们已经建立了自己的工程,可以在html上通过jquery的post请求,或者iOS上通过afnetworking/ASIHttpRequest来访问我们的服务器http://localhost:3000完成数据交互。

显然简单的数据处理满足不了一款真正应用,一个数据库显然是必须的。今天我们就了解一下nodejs里mysql的简单使用。今天的目标是完成Mac电脑中mysql的安装,nodejs的mysql依赖,以及通过nodejs完成mysql的数据交互。这是一整套东西,还是一整套的来说吧。

ps:不要被命令行弄晕啦,百度一下 命令行大全,mysql命令行大全,vi操作命令行大全。

pps:以前Linux下做mysql开发,用了phpmyadmin,那个舒爽,现在Mac下开发mysql还没找到合适的工具,那就命令行吧,就当熟悉熟悉mysql基础命令了:)

一:开发环境

1. Mac电脑:系统版本10.11.1
2. node版本:node-v5.2.0
3. 开发工具:webstorm 10.0.4
4. 浏览器:Chrome 42.0.2311.152 (64-bit)
5. mysql:mysql-5.7.10-osx10.10-x86_64


二:Mac下mysql的安装

老规矩,直接去官网下载,不会出妖蛾子,放心免费哒!

官网http://dev.mysql.com/downloads/mysql/



还是老规矩,下载最新的,放心这种软件的新版本不会出问题!注意下载dmg的,方便快捷,用Mac的亲们都懂的!下载好就直接打开安装,各种继续各种同意就行啦!

打开系统便好设置:



开启MySQL,为了方便,可以勾选下面的自动启动服务:



完成啦?验证一下我们的mysql是否正确安装,命令行敲起来吧!



进入这个界面,表示我们的mysql就安装完毕了!

ps:工程需要一些数据做测试用,就在这了用命令做一些操作练习练习吧:

1. 创建一个database

2. 创建一个table

3. 插入2行数据

三:nodejs的mysql依赖

打开终端,使用ls查看当前文件夹内容,cd进入文件夹。一直进入到自己工程目录(能ls查看到package.json),然后输入“npm install mysql“,安装nodejs的mysql依赖。

安装完成之后,查看WebStorm的工程目录-》node_modules



ok,安装成功!我们的项目可以连接mysql啦!

四:mysql在nodejs中的使用

看看官方推荐怎么说:https://github.com/felixge/node-mysql

var mysql = require('mysql');
var connection = mysql.createConnection({
host     : 'localhost',
user     : 'me',
password : 'secret',
database : 'my_db'
});

connection.connect();

connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) throw err;

console.log('The solution is: ', rows[0].solution);
});

connection.end();


解析:

1. var mysql = require(‘mysql’); 引入mysql模块

2. var connection =… ;设置参数

3. connection.connect(); 连接数据库

4. connection.query;执行数据库操作并执行回调,有err则抛出异常,控制台输出结果

5. connection.end(); 结束连接

基本的一个连接就是这样了,十分的好理解。可以根据自己项目需要,做一些调整,封装接口,异常处理等等。不作为这篇入门来说。

五:一个例子

首先介绍一下我的MVC架构

走到这一步,我们的开发条件已经都满足了,可以开始按自己想法去构建框架,书写代码了。本部分是我对工程的架构调整,跟上一篇文章一样,运用MVC思想重新架构nodejs工程。由于能力有限,可能有的地方还有问题,跳过本部分也可,欢迎指正!



- bin: config目录,各种参数的设置。

- bin-》dbConfig.js: 工程数据库设置,设置mysql的连接,host user password等信息。

- controller: 控制器C目录,处理各个方法接口的逻辑。

- model: M目录,完成数据库连接和数据处理。

- node_modules: node的库目录。

- public:静态文件目录。存放上传或下载的图片视频等资源。在web应用中,可以存放模版,可以存放html js等静态资源。在app应用中,只用来存放文件资源。

栗子:

目标:前端发出请求,传递参数到服务器,路由分配请求到C层目录文件做逻辑处理,通过M层完成数据库交互,C层返回数据给请求,前端展示数据。

数据库,建立库,建立表,插入两行数据:



前端用html,当页面加载完成时,调用js文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="shortcut icon" href="../favicon.ico" />
<title>首页</title>
<script type="text/javascript" src="../javascripts/jquery-1.11.3.js"></script>
<script type="text/javascript" src="../javascripts/indexJS.js"></script>
<script>
$(document).ready(getUsers);
</script>
</head>
<body>
<table id="user_table">
<tr>
<td>编号</td>
<td>名字</td>
<td>性别</td>
</tr>
</table>
</body>
</html>


indexJS.js:

/**
* Created by zhangke on 15/12/28.
*/
var serverHttp = "http://localhost:3000/";

function getUsers (){
//pageIndex要有逻辑来设置变量
$.post(serverHttp+"getUsers",{"pageIndex":"1"},function(rs){
/*rs结果:
{
status: true,
users: [
{ id: 1, name: 'littleA', sex: 1 },
{ id: 2, name: 'littleB', sex: 0 } ]
}
*/
if (rs.status){
if (rs.users.length){
for(var i=0;i<rs.users.length;i++){
var sex = rs.users[i].sex==1?"男":"女";
var html = '<tr>' +
'<td>'+rs.users[i].id+'</td>' +
'<td>'+rs.users[i].name+'</td>' +
'<td>'+sex+'</td>' +
'</tr>';
$("#user_table").append(html);
}
}else{
$("body").html("没有信息");
}
}else {
$("body").html("查询失败");
}
});
}


app.js,引入UserController,路由分配:

var users = require('./controller/UserController');
app.use('/getUsers', users.getUsers);


dbConfig.js,mysql参数设置:

/**
* Created by zhangke on 15/12/31.
*/
var mysql = require('mysql');

exports.db_connect = function () {
var db_connection = mysql.createConnection({
host     : 'localhost',
user     : 'root',
password : 'your password',
database : 'you created'
//debug    : 'true' //打开试试看?
});
return db_connection;
};


UserController.js:

/**
* Created by zhangke on 15/12/30.
*/

var UserModel = require('../model/UserModel');
exports.getUsers = function(req, res) {
console.log(req.body);
var pageIndex = req.body.pageIndex;
UserModel.getUsersMethod((pageIndex-1)*10,pageIndex*10,function(rs){
console.log('rs::::::',rs);
res.send(rs);
});
};


UserModel.js,连接mysql,完成数据交互,回调给Controller:

/**
* Created by zhangke on 15/12/31.
*/
var db_connection = require('../bin/dbConfig').db_connect();
db_connection.connect();

exports.getUsersMethod = function(limitA,limitB,rs){
db_connection.query('select * from user limit '+limitA+','+limitB, function(err, rows, fields) {
//console.log('getUsersMethod result is:', rows);
if (err) {
//输出错误信息,返回status为false
//throw err;
console.log("getUsersMethod err:"+err);
rs({status:false});
}else {
rs({status:true,users:rows});
}
});
};


OK!代码书写完毕,检查成果:

打开浏览器,输入http://localhost:3000/html/index.html



完成! 撒花!!! 庆祝!!!

麻麻再也不用担心我只会前端不会服务器啦!!!

-=-=-=-=-=-=-=-=-=--=-=-=YD的分割线-=-=-=-=-=-=-=-=-=--=-=-=

错误总结:

1. mysql安装完成后,输入命令”mysql -u root -p”错误,提示”command not found”

路径问题,我们需要先设置一下mysql命令的路径,本文中的”PATH=”$PATH”:/usr/local/mysql/bin”是本次指定,如果想完成默认设置,百度一下啦。

2. You must reset your password using ALTER USER statement before executing this statement.

第一次安装mysql,进入mysql后,输入命令会被告知”You must reset your password using ALTER USER statement before executing this statement.”意思是让用户替换密码。

3. npm install mysql错误



提示package.json找不到,因为npm安装依赖,是对于工程目录来说的,所以我们要先进入工程目录,当前目录下有

这个文件才可以安装mysql依赖。

4. 前端接收返回值为空,但是控制台有正确结果输出

可能是因为res.send的书写位置不对,因为非阻塞式工作原理,数据库的交互是异步完成的,所以这边还在数据交互呢,那边早都发出去res.send了。完成复杂的多model调用时,需要使用代理来完成,当所有结果得到之后再进行数据返回,百度nodejs proxy研究吧。入门篇明白原理就好。

UserModel.getUsersMethod((pageIndex-1)*10,pageIndex*10,function(rs){
console.log('rs::::::',rs);
res.send(rs);
});//res.send要等结果再发送。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息