用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="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="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="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="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="npm hljs cmake">npm install querystring</code>
<code class="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="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="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="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="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="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="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="node hljs avrasm">node timetrack_server.js</code>
最后在浏览器中访问http://127.0.0.1:3000

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











모바일 인터넷의 인기로 인해 Toutiao는 우리나라에서 가장 인기 있는 뉴스 정보 플랫폼 중 하나가 되었습니다. 많은 사용자는 다양한 요구 사항을 충족하기 위해 Toutiao 플랫폼에 여러 계정을 갖고 싶어합니다. 그렇다면 여러 개의 Toutiao 계정을 개설하는 방법은 무엇입니까? 이번 글에서는 터우탸오(Toutiao) 계좌를 여러 개 개설하는 방법과 신청 과정을 자세히 소개하겠습니다. 1. Toutiao 계정을 여러 개 개설하는 방법은 무엇입니까? 여러 개의 Toutiao 계정을 개설하는 방법은 다음과 같습니다. Toutiao 플랫폼에서 사용자는 다양한 휴대폰 번호를 통해 계정을 등록할 수 있습니다. 각 휴대폰 번호는 하나의 Toutiao 계정만 등록할 수 있습니다. 즉, 사용자는 여러 휴대폰 번호를 사용하여 여러 계정을 등록할 수 있습니다. 2. 이메일 등록: 다른 이메일 주소를 사용하여 Toutiao 계정을 등록하세요. 휴대폰 번호 등록과 마찬가지로 각 이메일 주소도 Toutiao 계정을 등록할 수 있습니다. 3. 타사 계정으로 로그인

오늘날 빠르게 변화하는 사회에서 수면의 질 문제는 점점 더 많은 사람들을 괴롭히고 있습니다. 사용자의 수면 품질을 향상시키기 위해 Douyin 플랫폼에 특수 수면 앵커 그룹이 등장했습니다. 라이브 방송을 통해 사용자와 소통하고, 수면 팁을 공유하며, 편안한 음악과 사운드를 제공하여 시청자가 편안하게 잠들 수 있도록 도와줍니다. 그렇다면 이러한 수면 앵커는 수익성이 있습니까? 이 기사에서는 이 문제에 중점을 둘 것입니다. 1. Douyin 수면 앵커는 수익성이 있습니까? Douyin 수면 앵커는 실제로 특정 이익을 얻을 수 있습니다. 첫째, 생방송실 내 팁 기능을 통해 선물과 양도를 받을 수 있으며, 이러한 혜택은 팬 수와 시청자 만족도에 따라 달라집니다. 둘째, Douyin 플랫폼은 생방송의 조회수, 좋아요, 공유 및 기타 데이터를 기반으로 앵커에게 특정 공유를 제공합니다. 일부 수면 앵커는 또한

무너진 스타돔 철도를 타고 죽음의 그림자 속을 여행할 때 무엇을 해야 하나요? 죽음의 그림자를 걷다(Walking through the Shadow of Death)는 메인 퀘스트 중 하나인 [Cat between Doves]이며, 메인 퀘스트의 마지막 단계이기도 합니다. 무너진 스타돔 철도, 관심 있는 분들은 꼭 구경해보세요. 1. 플롯의 이전 단계를 완료한 후 자동으로 아래 그림의 위치로 이동하게 되며, 3월 7일에 던전에 입장하게 됩니다. 2. 백업 계획은 전투입니다. [스톤하트텐] 위어드 플레이서 골드, 4개의 팀으로 구성된 최고의 캐릭터 전술과 마무리 스킬은 집단 공격이며, 때리기 어려운 방패와 우유를 가져오는 것이 가장 좋습니다. 주사위를 굴려 포인트가 샌드 골드보다 크면 패배하지 않으며, 종료 후에는 마무리 스킬의 양이 완전히 회복되므로 패배합니다. 그룹 공격 캐릭터를 데려와 포인트를 얻으세요. 상사에서

php-fpm 요청 처리 프로세스에 대한 자세한 설명 및 최적화 전략 1. 소개 웹 애플리케이션 개발에서 PHP는 매우 널리 사용되는 서버 측 스크립팅 언어입니다. 그리고 php-fpm(FastCGIProcessManager)은 PHP 요청을 처리하는 데 사용되는 PHP 관리자입니다. 이번 글에서는 php-fpm의 요청 처리 과정을 자세히 소개하고, php-fpm을 최적화하고 웹 애플리케이션의 성능을 향상시키는 방법에 대해 논의하겠습니다. 2. php-fpm 요청 처리 과정 클라이언트가 요청을 시작할 때

무너진 스타돔 철도에 얽힌 슬픈 이야기를 어떻게 처리해야 할까요? 모든 슬픈 이야기는 메인 퀘스트 [비둘기 사이의 고양이]의 일부입니다. 이 단계의 과정은 비교적 길며, 아래에서는 무너진 스타돔 철도의 모든 슬픈 이야기 퀘스트에 대해 자세히 설명하겠습니다. 봐. 1. 이전 스테이지를 완료하면 두 번째 신규 맵인 [망토영화TV공원]으로 자동 이동됩니다. 1개의 [핀볼 머신]에서 2개의 위치까지 미션을 모두 수행한 후 세 번째 캐릭터를 따라가세요. 줄거리, 4번째 위치에 있는 아이에게 말을 걸어 미니게임 [스피드 앤 너트]를 완료하세요. Tiantian Cool Run과 유사한 미니게임은 매우 간단합니다. 3. 그러면 추적 작업은 아래 그림의 위치 1[핀볼 기계]에서 위치 2로 날아가는 것입니다. 4. 아래 그림의 위치에 도착한 후 왼쪽에서 진입한 후 계속해서 미로를 통과해야 합니다. 작업 지점 15에 도달하기 위해 오른쪽으로 걸어갑니다.

Vue.js는 사용자 인터페이스 및 단일 페이지 애플리케이션을 구축하는 데 널리 사용되는 JavaScript 프레임워크입니다. 간결한 구문, 유연성 및 강력한 기능으로 인해 많은 개발자가 가장 먼저 선택합니다. 최근 프로젝트 개발에서 저희 팀과 저는 개발 프로세스와 작업 효율성을 최적화하는 데 있어 어느 정도 경험을 축적했으며, 이를 여러분과 공유하고 싶습니다. 우선, Vue.js 개발의 기초로서 Vue.js의 생태계와 핵심 개념을 완전히 이해해야 합니다. Vue.js의 핵심 개념에는 데이터 기반 및 구성 요소 시스템이 포함됩니다.

Java 언어는 널리 사용되는 객체 지향 프로그래밍 언어이며 엔터프라이즈 수준 소프트웨어 개발에 널리 사용됩니다. Java 언어에서 소프트웨어 개발 프로세스는 개발팀이 소프트웨어 개발 작업을 보다 효율적으로 완료하는 데 도움이 되는 매우 중요한 부분입니다. 이 기사에서는 Java 언어의 소프트웨어 개발 프로세스를 소개하고 각 단계에서 완료해야 하는 작업에 대해 논의합니다. 요구사항 분석 단계 소프트웨어 개발의 첫 번째 단계는 소프트웨어 요구사항을 결정하는 것을 목표로 하는 요구사항 분석을 수행하는 것입니다. Java 언어의 요구사항 분석 단계에서 개발팀은 다음을 필요로 합니다.

최근 데이터 양이 폭발적으로 증가하면서 빅데이터 활용에 대한 수요가 늘어나고 있다. 널리 사용되는 프로그래밍 언어인 PHP는 웹 개발에 널리 사용되며 빅 데이터 애플리케이션을 구축하는 데에도 사용할 수 있습니다. 이 기사에서는 데이터 처리, 저장 및 분석을 포함하여 PHP를 사용하여 빅 데이터 애플리케이션을 구축하는 기본 프로세스를 소개합니다. 1. 데이터 처리 데이터 처리는 빅데이터 활용의 첫 번째 단계로, 다양한 소스로부터 데이터를 수집하고 사전 처리 및 정리 작업을 수행하여 저장, 분석, 활용하는 것을 목적으로 합니다. PHP를 사용할 수 있습니다
