nodejs小项目之用户管理

在上篇文章<nodejs之连接mysql>中讲述了mysql的使用,nodejs连接mysql以及操作mysql的例子,今天的博文将

介绍下express框架的使用,以及结合easyui、mysql实现一个用户管理的小项目。本文

nodejs使用的是4.2.x最新版

express使用的是4.x最新版

mysql使用的是5.6.x最新版

easyui使用的是最新版1.4.4,官网下载地址:

http://www.jeasyui.com/download/downloads/jquery-easyui-1.4.4.zip

一、安装express

首先讲下express是什么?

express是一个nodejs框架,对nodejs进行了封装,可以很方便的让我们使用nodejs进行后端web开发。

express同时也是一个流行的mvc框架,跟java里的spring mvc,php 里的think php等框架类似。

打开cmd 进入工作目录,分别输入下面命令。

npm install express -g

npm install express-generator -g

第一个命令安装express框架,第二个命令安装express脚手架工具,express-generator是一个工具可以很方便的

帮我们生成express框架的项目结构。-g 参数表示全局安装,这样只需安装一次,下次就可以不用安装了。

执行后,cmd会出现一个翻滚的竖线,表示正在安装,安装完成后会打印安装的模块信息。

安装完成后,输入命令: express -V 回车,显示出express版本号证明安装成功,下面就可以使用了

二、项目初始化

(1)、生成项目骨架

进入工作目录

cd D:\Program Files\nodejs\MyProjects

执行以下命令

express -e user-demo

表示生成项目名为user-demo名字可以随便写,-e 表示使用ejs视图引擎,不加这个参数默认是用jade视图引擎。

回车后即可看到控制台打印如下:

162545_IPUG_2607155.jpg

同时在工作目录下生成了一个user-demo文件夹,点击进去,看到目录结构如下:

161531_mVsY_2607155.jpg

这是一个标准的mvc结构目录,其中public文件夹存放js、css、img等静态资源,routes文件夹存放路由,views文件夹存放视图也就是html文件,app.js是整个程序的入口,相当于一个main方法,用来加载启动整个应用,package.json文件里面配置整个项目依赖的node模块。

(2)、下载项目依赖模块

我们知道express是一个框架,同时它也依赖了一些其它模块,所以使用前需要把依赖的模块安装好了才能使用。

进入user-demo目录,执行下面命令:

npm install

看到控制台进入下载模式,下载完成后会打印各个模块信息,同时项目目录下也多了一个node_modules目录,里面就是下载好的各个依赖模块。

163115_Hrk5_2607155.jpg

(3)、运行项目

user-demo目录下执行npm start 命令表示启动express项目,控制台打印如下表示成功启动:

163306_w6Xg_2607155.jpg

这时在浏览器地址栏输入:http://localhost:3000访问显示如下图:

163415_j89G_2607155.jpg

 

 

 表示express项目已经正常运行,下面我们就可以真正开始使用它进行开发了。

(4)、分析express项目代码

打开routes目录下的index.js生成的代码如下:

164525_ZKJQ_2607155.jpg

前两行分别表示引入express模块和使用express的路由模块,router.get('/')表示处理/请求也就是http://localhost:3000/

res.render('index',....  这行代码表示express视图引擎将会渲染views目录下面的index.ejs文件,同时在该文件中可以

访问title变量,这是一个对象,可以往里面加入自己随意定义的变量。

我们打开views文件夹下的index.ejs文件看看内容是什么.

165156_vztT_2607155.jpg

这就是为什么刚才我们访问http://localhost:3000/ 页面显示 Welcome to Express的原因,在页面上访问到了title变量,并将它的值进行了输出,有点神奇吧。

三、集成easyui

(1)、解压下载好的jquery-easyui-1.4.4.zip将其中的locale文件夹和easyloader.js、jquery.easyui.min.js、jquery.min.js

放入public下面的javascript文件夹,将themes文件夹放入public下的stylesheets文件夹,放入后的目录结构如下:

170250_1t90_2607155.jpg

(2)、在views文件夹下新建userlist.ejs文件,引入easyui相关js和样式,完整内容如下:

<!DOCTYPE html>
<html>
  <head>
   <title><%= title %></title>
  <link rel='stylesheet' href='/stylesheets/style.css' />
 <link rel="stylesheet" type="text/css" href="/stylesheets/themes/default/easyui.css">
 <link rel="stylesheet" type="text/css" href="/stylesheets/themes/icon.css">
 <script type="text/javascript" src="/javascripts/jquery.min.js"></script>
 <script type="text/javascript" src="/javascripts/locale/easyui-lang-zh_CN.js">
 </script>
 <script type="text/javascript" src="/javascripts/jquery.easyui.min.js"></script>
  </head>
  <body>
<table  id="dg" title="用户管理" class="easyui-datagrid" style="width:800px;height:450px"
data-options="url:'/users/list',fitColumns:true,singleSelect:true,pagination:true,rownumbers:true" toolbar="#tb">

        <thead>
            <tr>
                <th field="cb" checkbox="true" align="center"></th>
                <th field="_id" width="200" align="center">ID</th>
                <th field="stuname" width="100" align="center">姓名</th>
                <th field="age" width="50" align="center">年龄</th>
                <th field="sex" width="100" align="center">性别</th>
                <th field="address" width="150" align="center">地址</th>
            </tr>
        </thead>
</table>

    <div id="tb">
        <div>
            <a href="javascript:openUserAddDialog()" class="easyui-linkbutton" data-options="plain:true,iconCls:'icon-add'">添加用户</a> 
            <a href="javascript:openUserModifyDialog()" class="easyui-linkbutton" data-options="plain:true,iconCls:'icon-edit'">修改用户</a> 
            <a href="javascript:deleteUser()" class="easyui-linkbutton" data-options="plain:true,iconCls:'icon-delete'">删除用户</a>
        </div>
    </div>
 
    <div class="easyui-dialog" id="dlg" style="width:480px;height:330px;padding:30px 30px;" closed="true" buttons="#dlg-buttons" data-options="" >
    <form action="" method="post" id="fm">
        <table cellspacing="8px" align="center">
            <tr>
                <input type='hidden' id="_id" name="_id" />
                <td>姓名:</td>
                <td><input type="text" id="stuname" name="stuname"  required="true" style="width: 100px;"/></td>
                <td>   </td>
            </tr>
            <tr>
                <td>年  龄:</td>
                <td><input type="text" id="age" name="age"  required="true"/></td>
                <td>   </td>
            </tr>
            <tr>
                <td>性  别:</td>
                <td><input type="text" id="sex" name="sex"  required="true"/></td>
                <td>   </td>
            </tr>
            <tr>
                <td>地址:</td>
                <td><input type="text" id="address" name="address"   required="true"/></td>
                <td>   </td>
            </tr>
             
        </table>
    </form>
</div>
<div id="dlg-buttons">
    <a href="javascript:saveUser();" class="easyui-linkbutton" iconCls="icon-ok">保存</a>
    <a href="javascript:closeUserDialog();" class="easyui-linkbutton" iconCls="icon-cancel">取消</a>
</div>
  </body>
<script type="text/javascript">
     var url="";
      //$("#dg").datagrid("reload");
       function saveUser(){
            $('#fm').form('submit', {
                url:url,
                onSubmit:function(){
                },
                success: function(result){
                    var result = eval('('+result+')');
                    if(result.success){
                        $.messager.alert("系统提示","保存成功");
                        $("#fm").form("reset");
                        $("#dlg").dialog("close");
                        $("#dg").datagrid("reload");
                    }else{
                        $.messager.alert("系统提示","保存失败");
                        return;
                    }
                }
            });
        }
         function closeUserDialog(){
            $("#dlg").dialog("close");
            $("#fm").form("reset");
        }
          function deleteUser(){
            var selectedrow=$("#dg").datagrid('getSelected');
            if(selectedrow==null){
                $.messager.alert("系统提示","请选择要删除的数据!");
                return;
            }
             
            var id=selectedrow._id;
            $.messager.confirm("系统提示","您确认要删除这条数据吗?",function(r){
                if(r){
                    $.post("/users/delete",{id:id},function(result){  
                        if(result.success){
                            $.messager.alert("系统提示","数据已成功删除!");
                            $("#dg").datagrid("reload");
                        }else{
                            $.messager.alert("系统提示","数据删除失败!");
                        }
                    },"json");
                }
            });
        }
 
     function openUserAddDialog(){
            $("#fm").form("reset"); //打开之前先清空数据
            $("#dlg").dialog("open").dialog("setTitle","添加用户");
            url = "/users/add";
        }
 
     function openUserModifyDialog(){
            var selectedrow=$("#dg").datagrid('getSelected');
            if(selectedrow ==null){
                $.messager.alert("系统提示","请选择一条数据进行修改");
                return;
            }
            $("#dlg").dialog("open").dialog("setTitle","修改用户信息");
            dispValue(selectedrow);
            url = "/users/edit/"+selectedrow._id;
        }
        function dispValue(row){
            $("#stuname").val(row.stuname);
            $("#age").val(row.age);
            $("#sex").val(row.sex);
            $("#address").val(row.address);
        }
</script>
</html>

(3)、index.ejs内容修改如下:

<!DOCTYPE html>
<html>
  <head>
 <meta charset="UTF-8">
    <title><%=title%></title>
 </head>
<body>
<a href='/users/list'>用户列表</a>
</body>
</html>

(4)、修改routes目录下的users.js内容如下:
var express = require('express');
var router = express.Router();
var student = require('./../database/mysql/student.js');

router.get('/list', function(req, res, next) {
  res.render('userlist', { title: '用户列表' });
});

//用户列表分页展示

router.post('/list',function(req,res){


});

//处理新增用户请求
router.post('/add',function(req,res){

});

//处理删除用户请求
router.post('/delete',function(req,res){

})
//处理编辑用户请求
router.post('/edit/:id',function(req,res){
})
module.exports = router;

四、整合mysql

(1)、安装node-mysql依赖

cd 到user-demo目录下,执行如下命令:

npm install mysql --save

--save表示讲mysql依赖保存到package.json文件中,其它跟上一篇文章完全一样

(2)、编写操作mysql功能模块

在user-demo目录下新建database/mysql/student.js文件,代码如下:

 

以上分别是增删改查方法,数据库和表student和上篇文章中的完全一样

五、运行项目

到现在为止我们的用户管理模块已全部开发完成,项目终于可以跑起来了

首先启动mysql

然后cmd 执行,npm start

再次访问http://localhost:3000/

点击用户列表链接,运行效果图如下:

用户列表:

173054_mgV0_2607155.jpg

添加用户:

173206_2nJu_2607155.jpg

173259_SdkV_2607155.jpg

保存,修改,删除也都可以了,测试下分页功能,默认每页显示10条,多添加些数据超过10条的分页显示效果:

173744_btCQ_2607155.jpg

至此,整个项目的开发就讲解完了,一个完整的使用nodejs进行前后端交互的简单小系统就产生了。

下篇博文将会在此项目基础上增加登录功能,并逐步开发出一个完整的后台管理系统。

今天的博文内容比较多,部分代码太长没有贴完,为了方便大家学习,项目源码稍后会上传到git@osc上。

好了,今天就到这里。

 

 

 

 

 

转载于:https://my.oschina.net/u/2607155/blog/600399

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值