用MySQL构建一个工作跟踪流程_MySQL
为了了解在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

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

隨著行動互聯網的普及,今日頭條已成為我國最受歡迎的新聞資訊平台之一。許多用戶希望在頭條平台上擁有多個帳號,以滿足不同的需求。那麼,如何開立多個頭條帳號呢?本文將詳細介紹開設多個頭條帳號的方法和申請流程。一、怎麼開多個頭條帳號?開設多個頭條帳號的方法如下:在頭條平台上,用戶可以透過不同的手機號碼註冊帳號。每個手機號只能註冊一個頭條帳號,這表示用戶可以利用多個手機號註冊多個帳號。 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可以使用
