手机版

NodeJS服务器开发入门(快速MySQL)

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

NodeJS无疑是前端的一个里程碑。随着如今的日益普及,掌握NodeJS不再是加分项,而是前端攻城师必须掌握的技能。本文将和同志们一起完成一个基于Express MySQL的入门级服务器应用,可以简单的在数据库中CRUD一个表。不过我还是敢想,通过这个应用,对后端开发接触不多的同志,可以对使用Node进行后端开发有一个大概的了解。

快速工程环境准备

1.安装express,和express项目种子生成器(什么?你问为什么第一步不装NodeJS,我只能呵呵.)

安装快速

Npm安装快捷方式-g安装快捷方式

Npm安装快速发电机g2。创建项目。输入项目目录并运行命令

express projectNameexpresst项目种子生成器将帮助我们生成express的相应工程结构,如下所示

/bin:用于应用程序启动

/public:静态资源目录

/routes:可视为控制器目录

/view : jade模板目录,可视为视图目录

app.js程序的主文件

3.进入项目,安装依赖项,然后在项目的根目录中启动应用程序,使用npm install安装依赖项,并使用npm start启动应用程序。完成后,您将在命令行工具中看到以下界面,当您在浏览器中访问它时,您将获得我们应用程序的默认页面

MySQL环境准备

1.当然,你应该先准备好MySQL环境。可以参考//www . JB 51 . net/article/39188 . htm进行安装,同时也建议安装一个数据库管理工具,比如说navicat for mysql,方便操作

2.创建表安装MySQL后,进入数据库,创建一个要使用的表(如user)。结构如下

3.安装节点的MySQL驱动(请允许安装X …)。在package.json的依赖项中添加“MySQL”:“最新”,并执行npm install来安装依赖项

编写相关代码,集成Express MySQL

1.首先,让我们构建几个目录,并简单地将它们划分为较低的级别(看得出我还是很小心的?)

在项目根目录中添加三个目录:

util工具方法

配置

道-与数据库交互

成品工程结构

2.在conf目录中,编写mySQL数据库连接配置

//conf/db.js//MySQL数据库连接配置模块。exports={ MySQL : { host 3360 ' 127 . 0 . 0 . 1 ',user3360' root ',password: ' ',database3360' test ',//前面创建的用户表位于此数据库2中。编写CRUD SQL语句

//Dao/user sqlmaping . js//crud SQL语句var user={insert: '插入到用户(id,姓名,年龄)值(0,)',update: '更新用户集名称=?年龄=?其中id=?',delete:“从用户中删除,其中id=?”,queryById:“从用户中选择*其中id=?”,queryAll:“从用户中选择*”};module.exports=user3.添加路由,实现数据库的CRUD

以C (new)的具体实现为例,在/routes/users.js中添加一条路由

//添加用户router.get ('/adduser ',函数(req,RES,next) {userdao.add (req,RES,next);});在userDao中实现add方法

//dao/userDao.js//实现与关系型数据库交互var MySQL=require(' MySQL ');var $conf=require('./conf/conf ');var $util=require('./util/util’);var $sql=require(' ./userSqlMapping’);//使用连接池,提升性能var池=MySQL。创建池($ util)。extend({ },$ conf。MySQL));//向前台返回JSON方法的简单封装var jsonWrite=function (res,ret){ if(ret的类型===' undefined '){ RES . JSON({代码: ' 1 ',msg: '操作失败'});} else { RES . JSON(ret);}};模块。导出={ add :函数(req,res,next){ pool。getconnection(函数(err,connection) {//获取前台页面传过来的参数var param=req。查询| |请求。参数;//建立连接,向表中插入值//'插入到用户(id,姓名,年龄)值(0,)',connection.query($sql.insert,[param.name,param.age],function(err,result){ if(result){ result={ code : 200,msg: '增加成功'};}//以json形式,把操作结果返回给前台页面jsonWrite(res,result);//释放连接连接。release();});});}};4.测试整合是否成功

因为前面实现的是一个得到请求的增加方法,所以可以在浏览器中直接使用地址访问,进入路由,http://localhost :3000/users/addUser?姓名=xyzage=18 .如果你得到如下JSON返回或看到数据表中有上面的数据插入,表示整合成功了

5.同理,实现创建、读取、更新和删除其它的方法,最终完整的的routes/user.js为:

var express=require(' express ');定义变量路由器快递.路由器();var userDao=require('./Dao/UserDao’);/*获取用户列表*/router.get('/',函数(请求,资源,下一个){资源.发送('用资源响应');});//增加用户//TODO同时支持get,postrouter.get('/addUser ',函数(req,res,next) {userDao.add(req,res,next);});router.get('/queryAll ',函数(req,res,next) {userDao.queryAll(req,res,next);});router.get('/query ',函数(req,res,next){ userdao。querybyyid(req,res,next);});router.get('/deleteUser ',函数(req,res,next) {userDao.delete(req,res,next);});router.post('/updateUser ',函数{userDao.update(req,res,next);});module.exports=路由器;完整的userDao.js为

//dao/userDao.js//实现与关系型数据库交互var MySQL=require(' MySQL ');var $conf=require('./conf/db ');var $util=require('./util/util’);var $sql=require(' ./userSqlMapping’);//使用连接池,提升性能var池=MySQL。创建池($ util)。extend({ },$ conf。MySQL));//向前台返回JSON方法的简单封装var jsonWrite=function (res,ret){ if(ret的类型===' undefined '){ RES . JSON({代码: ' 1 ',msg: '操作失败'});} else { RES . JSON(ret);}};模块。导出={ add :函数(req,res,next){ pool。getconnection(函数(err,connection) {//获取前台页面传过来的参数var param=req。查询| |请求。参数;//建立连接,向表中插入值//'插入到用户(id,姓名,年龄)值(0,)',connection.query($sql.insert,[param.name,param.age],function(err,result){ if(result){ result={ code : 200,msg: '增加成功'};}//以json形式,把操作结果返回给前台页面jsonWrite(res,result);//释放连接连接。release();});});},delete:函数(req,res,next){//由Idpool删除。GetConnection(函数(err,connection)){ var id=req。查询。id;connection.query($sql.delete,id,function(err,result){ if(result。影响0){结果={代码: 200,msg: '删除成功'};} else { result=void 0;}jsonWrite(res,result);连接。release();});});},更新:函数(请求,资源,下一个){//按id/更新为了简单,要求同时传名字和年龄两个参数var param=req.bodyif(param。name==null | | param。age==null | | param。id==null){ JSonwrite(RES,未定义);返回;}pool.getConnection(函数(错误,连接){连接。查询($ SQL)。更新,[param.name,param.age,param.id],函数(错误,结果){//使用页面进行跳转提示if(结果。effect rows 0){ RES . render(' suc ',{ result : result });//第二个参数可以直接在翡翠中使用} else {res.render('失败',{ result : result });}连接。release();});});},queryById:函数(req,res,next){ var id=req。查询。id;//为了拼凑正确的结构化查询语言语句,这里要转下整数pool.getConnection(函数(错误,连接){连接。查询($ SQL)。querybyId,Id,函数(err,result) {jsonWrite(res,result);连接。release();});});},查询:函数(请求、资源、下一个){ pool。getconnection(函数(err,connection){ connection。查询($ SQL)。queryal,function(err,result) {jsonWrite(res,result);连接。release();});});}};除了更新测试外,其它得到请求都可以直接在浏览器中使用地址参数完成测试。为了模拟邮政请求,同时简单使用下翡翠模板(快递支持的一种模板引擎),我们在/视图目录新建三个翡翠文件

updateUser.jade

扩展layoutblock内容氕更新用户资料表单(方法='post ',操作='/p/users/updateUser ')div。form-rowlabespan id :输入(类型=' text ',名称=' id ')div。form-rowlabespan name : input(type=' text ',name=' age ')div。表单-行输入(类型=' text ',名称=' submit ')such jade .

阻止内容氕操作成功!pre # { JSON。字符串(结果)}失败。

阻止内容氕操作失败!pre #{JSON.stringify(结果)}以下是更新测试结果

最后,如果你使用的是想法或webStrom这样的IDE,你就不需要安装表达和表达项目种子生成器了。这两个集成驱动电子设备是可以直接创建NodeJS项目

小结:

一个表达的地狱世界就差不多完成了,可以通过这个链接下载此例子源代码http://pan.baidu.com/s/1jGvd4Bc。更多表达的功能(如日志,自动化测试等),等待大家去解锁,愿玩得愉快!

版权声明:NodeJS服务器开发入门(快速MySQL)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。