当前位置: 首页 > 后端技术 > Node.js

使用mysql+node搭建一个简单的职位列表网站

时间:2023-04-03 17:07:37 Node.js

本来打算增删改查是web开发中最常见的操作,所以下面的文章将演示如何使用node+mysql搭建一个简单的网站.所需知识本教程不涉及express等web框架,但请确保你对node+mysql等有基本的了解。需求分析本网站有两个页面,首页和子页面。首页:如下图,首页上方是一个查看档案的按钮,点击进入子页面。上半部分是一张表,有日期、耗时、描述三个字段。每列有两个操作,可以归档和删除。存档的记录将从首页消失,并显示在子页面中。单击删除将完全删除该列。下方是用户输入并提交的表单,提交的记录出现在表单的上方。子页面:如下图所示,子页面的上半部分是一个表,里面有日期、时间、描述三个字段。每列只有一个操作。单击删除将完全删除该列。下方有一个返回按钮,点击返回首页。项目目录在根目录下创建app.js,app.js负责创建http服务器、页面路由控制、登录数据库等功能。在根目录下新建一个lib文件夹,在lib下新建timetrack.js,负责解析post请求。与数据库交互(增删改查),返回服务端渲染的html给客户端等功能安装node的mysql数据库,命令如下:npminstallmysql--save最后目录如下:工具准备mysql数据库:5.7.22节点版本:10.4.1工作台:6.3社区数据库部分首先,打开工作台,登录,新建数据库worklist和新建sql选项卡,输入以下命令即可创建一个表,用于存储本项目涉及的数据。--sql脚本CREATETABLEIFNOTEXISTS工作(idINT(10)NOTNULLAUTO_INCREMENT,hoursDECIMAL(5,2)DEFAULT0,dateDATE,archivedINT(1)DEFAULT0,descriptionLONGTEXT,PRIMARYKEY(id));这样,数据库部分就准备好了。编码首先,在app.js中输入如下代码:lethttp=require('http')letwork=require('./lib/timetrack')letmysql=require('mysql')vardb=mysql.createConnection({host:'127.0.0.1',user:'@yourusername',//你的数据库用户名password:'@yourpassword',//你的数据库密码database:'worklist'})varserver=http.createServer((req,res)=>{switch(req.method){case'POST':switch(req.url){case'/':work.add(db,req,res)breakcase'/archive':work.archive(db,req,res)breakcase'/delete':work.delete(db,req,res)break}breakcase'GET':switch(req.url){case'/':工作。show(db,res)breakcase'/archived':work.showArchived(db,res)break}break}})console.log('服务器启动...')server.listen(3000,'127.0.0.1')接下来在lib目录下的timetrack.js中输入如下代码:varqs=require('querystring')//1showexports.show=function(db,res,showArchived){让archiveValue=(showArchived)?1:0分贝。query('SELECT*FROMworkWHEREarchived=?ORDERBYdateDESC',[archiveValue],function(err,rows){if(err){throwerr}if(showArchived){//子页面html=(showArchived)?'':'查看存档
'html+=exports.workHitlistHtml(rows)html+='返回'}else{//主页html=(showArchived)?'':'查看存档
'html+=exports.workHitlistHtml(rows)html+=exports.workFormHtml()}exports.sendHtml(res,html)})}//显示上半部分--listexports.workHitlistHtml=function(rows){varhtml='

'for(variinrows){html+=''html+=''html+=''html+=''if(!rows[i].archived){html+=''}html+=''html+=''}html+='
'+rows[i].date+''+rows[i].hours+''+行[i].description+''+exports.workArchiveForm(rows[i].id)+''+exports.workDeleteForm(rows[i].id)+'
'返回html}//Showbottomhalf--submitexports.workFormHtml=function(){varhtml=''+'

日期(YYYY-MM-DD):

'+'

耗时:

'+'

描述:
'+'

'+''+''returnhtml}//返回浏览器exports.sendHtml=function(res,html){res.setHeader('Content-Type','text/html;charset=UTF-8')res.setHeader('Content-Length',Buffer.byteLength(html))res.end(html)}//渲染两个操作——归档和删除exports.workArchiveForm=function(id){returnexports.actionForm(id,'/archive','存档')}exports.workDeleteForm=function(id){returnexports.actionForm(id,'/delete','删除')}exports.actionForm=function(id,path,label){varhtml=''+''+''+''returnhtml}//2addexports.add=function(db,req,res){exports.parseReceivedData(req,function(work){db.query('INSERTINTOwork(hours,date,description)VALUES(?,?,?)',[work.hours,work.date,work.description],function(err){if(err)throwerrexports.show(db,res)})})}//解析post请求exports.parseReceivedData=function(req,cb){varbody=''req.setEncoding('utf8')req.on('data',chunk=>{body+=chunk})req.on('end',()=>{vardata=qs.parse(body)cb(data)})}//3存档exports.archive=function(db,req,res){exports.parseReceivedData(req,function(work){db.query("UPDATEworkSETarchived=1WHEREid=?",[work.id],function(err){if(err)throwerrexports.show(db,res)})})}//4deleteexports.delete=function(db,req,res){出口.parseReceivedData(req,function(work){db.query("DELETEFROMworkWHEREid=?",[work.id],function(err){if(err)throwerrexports.show(db,res)})})}//5查看存档exports.showArchived=function(db,res){exports.show(db,res,true)}在运行终端输入如下命令:nodeapp打开http服务器,并然后在浏览器URL中输入http://localhost:3000/注1在运行http服务器之前,请确保数据库服务已开启,否则会报错2在首页输入日期时,请保证格式为:2017-03-06,不能是其他格式,否则数据库会报错:Incorrectdatevalue,参考mysql5.7文档https:///dev.mysql.com/doc/ref...workbench基本操作https://blog.csdn.net/souland...SQL基础教程https://book.douban.com/subje...Node.js实战https://book.douban。com/subje...mysql模块https://github.com/mysqljs/mysql