为了了解在Node中如何使用MySQL,我们来看一个需要RDBMS的程序。
假设你要创建一个Web程序,用来记录你是如何度过工作日的。这需要记录工作的日期,花在工作上的时间,以及工作完成情况的描述。
1. 系统分析
1.1 系统流程
这个程序会有个表单,用来输入工作的详细信息,如图:
? 工作信息输入后,可以被归档或删除,让它不再显示在用来输入更多工作的输入域上方,如图。 点击“Archived Work”链接可以把之前归档的工作项全部显示出来。

?
1.2 系统任务
创建程序逻辑 创建程序工作所需的辅助函数 编写让你可以用MySQL添加、删除、更新和获取数据的函数 编写渲染HTML记录和表单的代码1.3 使用模块
这个程序会用Node内置的http模块实现Web服务器的功能,用一个第三方模块跟MySQL服务器交互。一个名为timetrack的定制模块,它是程序特有的函数,用来在MySQL中存储、修改和获取数据。图5-4是这个程序的概览。
先用下面这条命令安装这个很受欢迎的MySQL Node模块:
<code class="language-npm hljs cmake">npm install mysql</code>
?
1.4 最终效果
最终结果如图5-5所示,一个可以用来记录所做工作的简单Web程序,还可以回顾、归档及删除工作记录。
?
2. 创建程序的逻辑
接下来需要创建两个文件存放程序逻辑。这个两个文件分别是: timetrack_server.js,用来启动程序; timetrack.js,包含程序相关功能的模块。
先创建timetrack_server.js,把代码清单5-7中的代码放到里面。这段代码包含Node的HTTPAPI,程序特定的逻辑以及MySQL API。根据你的MySQL配置填入host、 user和password这些设定值。
<code class="language-javascript hljs ">var http = require( 'http' ) ; var work = require( './lib/timetrack' ) ; var mysql = require( 'mysql' ) ; var db = mysql.createConnection( { host: '127.0.0.1', user: 'root', password: 'root', database: 'timetrack' } ) ;</code>
接下来添加代码清单5-8中的逻辑,定义Web程序的行为。用这个程序可以浏览、添加和删除工作执行记录。此外还可以归档工作记录。被归档的工作记录不再出现在主页面上,但还可以在一个单独的Web页面上浏览。
<code class="language-javascript hljs ">var server = http.createServer( function (req, res) { switch ( req.method ) { case 'POST': { switch ( req.url ) { case '/': { work.add( db, req, res ) ; break ; } case '/archive': { work.archive( db, req, res ) ; break ; } case '/delete': { work.delete(db, req, res) ; break ; } } break ; } case 'GET': { switch ( req.url ) { case '/': { work.show( db, res ) ; break ; } case 'http://blog.csdn.net/archived': { work.showArchived( db, res ) ; break ; } } break ; } } } ) ;</code>
代码清单5-9是timetrack_server.js中的最后一块代码。这段代码创建了一个数据库表(如果不存在的话) , 启动HTTP服务器,监听本机的3000端口。所有的node-mysql查询都用query函数执行。
<code class="language-javascript hljs ">db.query( 'create table if not exists work ( ' + 'id int(10) not null auto_increment, ' + 'hours decimal(5, 2) default 0, ' + 'date date, ' + 'archived int(1) default 0, ' + 'description longtext, ' + 'primary key(id) )', function (err) { if (err) throw err ; console.log( 'Server started...' ) ; server.listen( 3000, '127.0.0.1' ) ; } ) ;</code>
3. 创建辅助函数发送HTML,创建表单,接收表单数据
启动程序的文件已经完成,该创建定义程序其他功能的文件了。创建一个名为lib的目录,然后在这个目录下创建文件timetrack.js。把代码清单5-10中的代码放到这个文件中,其中包含Node querystring API,并定义了辅助函数,用来发送Web页面HTML,接收通过表单提交的数据。
<code class="language-npm hljs cmake">npm install querystring</code>
<code class="language-javascript hljs ">var qs = require( 'querystring' ) ; exports.sendHtml = function (res, html) { res.setHeader( 'Content-Type', 'text/html' ) ; res.setHeader( 'Content-Length', Buffer.byteLength( html ) ) ; res.end( html ) ; } ; exports.parseReceivedData = function (req, cb) { var body = '' ; req.setEncoding( 'utf8' ) ; req.on( 'data', function (chunk) { body = chunk ; } ) ; req.on( 'end', function () { var data = qs.parse( body ) ; cb( data ) ; } ) ; } ; exports.actionForm = function (id, path, label) { var html = '</code>
' ; return html ; } ;
4. 用MySQL添加数据
辅助函数到位了,该编写往MySQL数据库里添加工作记录的代码了。把下面代码清单里的代码添加到timetrack.js中。
<code class="language-javascript hljs ">exports.add = function (db, req, res) { exports.parseReceivedData( req, function (work) { db.query( 'insert into work( hours, date, description ) ' + 'values ( ?, ?, ? )', [ work.hours, work.date, work.description ], function (err) { if (err) throw err ; exports.show( db, res ) ; } ) ; } ) ; } ;</code>
注意上面代码中的问号(?),这是用来指明应该把参数放在哪里的占位符。在添加到查询语句中之前, query方法会自动把参数转义,以防遭受到SQL注入攻击。此外还要留意一下query方法的第二个参数,是一串用来替代占位符的值。
5. 删除MySQL数据
<code class="language-javascript hljs ">exports.delete = function (db, req, res) { exports.parseReceivedData(req, function (work) { db.query( 'delete from work where id = ?', [work.id], function (err) { if (err) throw err ; exports.show( db, res ) ; } ) ; } ) ; } ;</code>
6. 更新MySQL数据
为了实现更新工作记录的逻辑,将它标记为已归档,把下面的代码添加到timetrack.js中。
<code class="language-javascript hljs ">exports.archive = function (db, req, res) { exports.parseReceivedData( req, function (work) { db.query( 'update work set archived = 1 where id = ?', [work.id], function (err) { if (err) throw err ; exports.show( db, res ) ; } ) ; } ) ; } ;</code>
7. 获取MySQL数据
添加、删除、更新工作记录的逻辑已经定义好了,现在可以把代码清单5-14中的逻辑添加到到timetrack中,用来获取工作记录数据(归档的或未归档的),从而把它渲染为HTML。在发起查询时传入了一个回调函数,它的参数rows是用来保存返回的查询结果的。
<code class="language-javascript hljs ">exports.show = function (db, res, showArchived) { console.log( 'in show function' ) ; var query = 'select * from work ' + 'where archived = ? ' + 'order by date desc ' ; var archiveValue = (showArchived) ? 1 : 0 ; console.log( 'archiveValue:' + archiveValue ) ; db.query( query, [archiveValue], function (err, rows) { console.log( rows ) ; if (err) throw err ; html = (showArchived) ? '' : 'Archived Work ' ; html += exports.workHitlistHtml( rows ) ; html += exports.workFormHtml() ; exports.sendHtml(res, html) ; } ) ; } ; exports.showArchived = function (db, res) { exports.show(db, res, true) ; }</code>
8. 渲染MySQL记录
将下面代码清单中的代码添加到timetrack.js中。它会将工作记录渲染为HTML。
<code class="language-javascript hljs ">exports.workHitlistHtml = function (rows) { var html = '' ; for( var i in rows ) { html += '' ; html += '' html += '' html += '' if ( !rows[i].archived ) { html += '' } html += '' ; } html += '</code>
' + rows[i].date + ' |
' + rows[i].hours + ' |
' + rows[i].description + ' |
' + exports.workArchiveForm( rows[ i ].id ) + ' |
' +exports.workDeleteForm( rows[i].id )+ ' |
' ; return html ; } ;
9. 渲染HTML表单
<code class="language-javascript hljs ">exports.workFormHtml = function () { var html = '</code>
' ; return html ; } ; exports.workArchiveForm = function (id) { return exports.actionForm(id, '/archive', 'Archive') ; } ; exports.workDeleteForm = function (id) { return exports.actionForm( id, '/delete', 'Delete' ) ; } ;
10. 试一下
程序已经做完了,现在可以运行了。记得先用MySQL管理工具创建名为timetrack的数据库。然后在命令行中用下面的命令启动程序:
<code class="language-node hljs avrasm">node timetrack_server.js</code>
最后在浏览器中访问http://127.0.0.1:3000

随着移动互联网的普及,今日头条已经成为我国最受欢迎的新闻资讯平台之一。许多用户希望在头条平台上拥有多个账号,以满足不同的需求。那么,如何开多个头条账号呢?本文将详细介绍开设多个头条账号的方法和申请流程。一、怎么开多个头条账号?开设多个头条账号的方法如下:在头条平台上,用户可以通过不同的手机号码注册账号。每个手机号只能注册一个头条账号,这意味着用户可以利用多个手机号注册多个账号。2.邮箱注册:使用不同的邮箱地址注册头条账号。与手机号码注册类似,每个邮箱地址也可以注册一个头条账号。3.第三方账号登录

在当今这个快节奏的社会,睡眠质量问题困扰着越来越多的人。为了改善用户的睡眠质量,抖音平台上出现了一群特殊的睡眠主播。他们通过直播与用户互动,分享睡眠技巧,提供放松的音乐和声音,帮助观众安然入睡。那么,这些睡眠主播是否有收益呢?本文将围绕这一问题展开探讨。一、抖音睡眠主播有收益嘛?抖音睡眠主播确实能够获得一定的收益。首先,他们可以通过直播间的打赏功能获得礼物和转账,这些收益取决于他们的粉丝数量和观众满意度。其次,抖音平台会根据直播的观看量、点赞量、分享量等数据,给予主播一定的分成。一些睡眠主播还会

崩坏星穹铁道行过死荫之地怎么做?行过死荫之地是主线任务【鸽群中的猫】其中一环,也是主线的最后阶段,下面小编带来崩坏星穹铁道行过死荫之地任务详解,感兴趣的小伙伴们快来看看吧。1.过完上一阶段剧情后,会自动传送到下图位置,和三月七对话后进入副本,记得组好队2.备用方案是要打【石心十人】诡异砂金,队伍四个角色战术和终结技最好都是群攻,最好带上盾和奶,这个【石心十人】诡异砂金不好打,摇骰子的时候,如果你的点数大于砂金就不会被打,并且结束后回满终结技能量,小于就会被打,所以尽量带群攻角色打点数。在boss

崩坏星穹铁道所有悲伤的故事怎么做?所有悲伤的故事是主线任务【鸽群中的猫】其中一环,此阶段流程比较长,下面小编带来崩坏星穹铁道所有悲伤的故事任务详解,各位朋友们来看看吧。1.完成前一阶段之后,会自动传送到第2个新地图【克劳克影视乐园】,一路追踪任务从1【弹珠机】去2位置跟着第3位角色发挥,完成剧情后,前往第4位位置和小孩对话,完成小游戏【速度与坚果】,类似天天酷跑的小游戏很简单。3.接着追踪任务从下图1位置【弹珠机】飞到2位置4.到下图位置后,需要走迷宫,从左边进去后,一直靠右走即可到达1任务点5

php-fpm请求处理流程详解与优化策略一、引言在Web应用开发中,PHP是一种非常流行的服务器端脚本语言。而php-fpm(FastCGIProcessManager)则是PHP的一种管理器,用于处理PHP请求。本文将详细介绍php-fpm的请求处理流程,并探讨如何优化php-fpm,提升Web应用的性能。二、php-fpm请求处理流程客户端发起请求当

Vue.js是一种流行的JavaScript框架,用于构建用户界面和单页面应用程序。其简洁的语法、灵活性和强大的功能使得它成为了许多开发者的首选。在最近的项目开发中,我和我的团队积累了一些优化开发流程和工作效率的经验,特此分享给大家。首先,作为Vue.js开发的基础,我们要充分了解Vue.js的生态系统和核心概念。Vue.js的核心概念包括数据驱动、组件系统

Java语言是一种使用广泛的面向对象编程语言,被广泛应用于企业级软件开发中。在Java语言中,软件开发流程是一个非常重要的部分,它能够帮助开发团队更加高效地完成软件开发任务。本文将会介绍Java语言中的软件开发流程,并探讨其各个阶段所要完成的任务。需求分析阶段软件开发的第一步是进行需求分析,该阶段旨在确定软件需求。在Java语言中的需求分析阶段,开发团队需要

近年来,随着数据量的爆炸式增长,大数据应用的需求越来越大。PHP作为一门广受欢迎的编程语言,被广泛应用于Web开发中,同时也可以用于构建大数据应用。本文将介绍使用PHP构建大数据应用的基本流程,包括数据处理、存储与分析三个方面。一、数据处理数据处理是大数据应用的第一步,其目的是将数据从各个来源采集过来,并进行初步处理和清洗,以便存储和分析使用。PHP可以使用


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

Dreamweaver CS6
Visual web development tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Zend Studio 13.0.1
Powerful PHP integrated development environment
