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

APNs功能之Node.js和Mysql应用总结

2014-01-27 10:15 585 查看
APNs功能之Node.jsMysql应用总结

   这篇文档主要是总结Node.js和Mysql的学习心得体会。当然也可以看作是此前所写的消息推送服务的续篇。

简单描述下应用背景,我们的应用需要实现苹果的消息推送服务APNs,之前已经实现了iOS客户端配置和功能代码,也实现了推送通知的本地Provider功能代码,具体参考此前的系列总结。好比一个三角形,A点代表iOS移动设备端,B点代表苹果的消息推送服务器,C点代表应用开发者的本地服务器,现在A和B连接好了,B和C也连接好了,就差A和

B建立连接沟通。

这样一来,很明显就是要在本地搭建一个服务器了,可以处理A发送的请求;当然也少不了数据库,用来存储相关数据。

说到这里,不同技术背景的人会有不同的方案,在此我采用了Node.js+Mysql的解决方案。当然其他方案如ASN.NET、JSP、PHP加上SQLServer、Mysql、MongoDB等等就不谈论了。纯粹作为技术学习和新方案的尝试。

Node.js

作为这篇文档的重点内容,Node.js肯定是要优先总结的。

我这种刚学习Node.js的新手,就不敢把此文当做Node.js的入门资料了,只是简单介绍一下,然后直接根据应用需求实现代码。

Node.js实现了服务端Javascript,通过简单快捷的环境搭建,就可以实现一个运行Javascript的服务器。

1、 去官网下载最新的Node.js安装程序。说明一下,我是在Windows32位操作系统上安装,所以下载Windows对应安装程序即可。我的版本为:node-v0.10.24-x86。

2、 安装Node.js。

3、 在开始—>所有程序中,找到Node.js的命令行程序Node.js command prompt并运行

好了,至此,你已经可以开始编程了。就是这么简单快捷。

或许很多人还是很困惑,那在哪里写代码呢,命令行?

在此,我要说一下刚接触时候我的感受:我觉得很郁闷,不知道从何入手。

对于很多新手,大家需要的是把事情说明白一点,而不是玄乎。可以这样理解,Node.js就是一个服务器,用于搭载Javascript、CSS、Html等网页所可以有的一切。但是他本身不集成IDE。再具体点,他的出现,使我们可以不用熟悉的IIS、Apache、Tomcat来部署了,只需要运行Node.js,然后通过一句话“node xxx.js”,加载已经写好的Javascript,就一切OK了。是的,Javascript,那用你熟悉的任何方式和工具去书写吧。Notepad++是我选择的工具。

一定还有疑惑,没关系,我们先来看实例。

下列实例实现一个可以上传图片文件并预览的页面,还有一个向数据库插入一条数据的请求。

先看这个例子NodejsDemo的文件夹结构

var mysql = require('mysql');

var db_options = {

host: "localhost",

port: 3306,

user: "root",

password: "Your password"

};

//database name

var DATABASE = ‘NodeJsTest’,

//table name

TABLE = 'Users';

function storeUserInfo(user, res){

if(user.name == " "){

res.writeHead (600, {"Content-Type": "text/plain"});

res.write ("error: name can not be empty.\n");

res.end();

return;

}

var client = new mysql.createConnection(db_options);

client.query('USE '+DATABASE);

client.query(

"SELECT * FROM "+ TABLE + " WHERE name = ?",

[user.name],

function(err, results, fields) {

if (err) {

client.end();

res.writeHead (700, {"Content-Type": "text/plain"});

res.write ("error: " + err);

res.end();

return;

}

console.log(results.length);

if(results.length < 1){

//Added new record

client.query(

"INSERT INTO "+ TABLE + " SET name = ?, country = ?, city = ?, street = ? ", [user.name, user.country, user.city, user.street],

function(err, results, fields) {

if (err) {

client.end();

res.writeHead (700, {"Content-Type": "text/plain"});

res.write ("error: " + err);

res.end();

return;

}

client.end();

res.writeHead (200, {"Content-Type": "text/plain"});

res.write ("added new user");

res.end();

console.log(results);

console.log(fields);

}

);

}else if(results.length == 1){

//Update record

client.query(

"UPDATE " + TABLE + " SET name = ?, country = ?, city = ?, street = ? WHERE name = ?", [user.name],

function(err, results, fields) {

if (err) {

client.end();

res.writeHead (700, {"Content-Type": "text/plain"});

res.write ("error: " + err);

res.end();

return;

}

client.end();

res.writeHead (200, {"Content-Type": "text/plain"});

res.write ("updated");

res.end();

console.log(results);

console.log(fields);

}

)

}else{

client.end();

res.writeHead (700, {"Content-Type": "text/plain"});

res.write ("error: Repeat records exist!");

res.end();

console.log("Repeat records exist!");

//handle

}

}

);

}

exports.storeUserInfo = storeUserInfo;


View Code

说明:这个js实现向数据库里面插入一条记录,如果已存在该用户,则更新用户信息。就是这样的熟悉味道。

忘了一点,我没有封装这个demo的数据库连接,因为当操作多了以后,还是封装一个负责数据库连接操作的DBHelper比较好。

到此,Node.js的总结就结束了,别忘了重新node index.js后,在浏览器里面访问“Your IP : Your port/sendMyInfo?name=xxx&country=xxx&city=xxx&street=xxx”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: