设为首页 收藏本站
查看: 1106|回复: 0

[经验分享] NodeJS+Express+MongoDB 简单实现数据录入及回显展示【Study笔记】

[复制链接]

尚未签到

发表于 2017-12-15 08:41:40 | 显示全部楼层 |阅读模式
  近期在看NodeJS相关
  不得不说NodeJS+Express 进行网站开发是很不错,对于喜欢玩JS的来说真是很好的一种Web开发组合
  在接触NodeJS时受平时Java或者C#中API接口等开发的思维惯性,类比着去学习了解发现其实很多都是通性的
  特别是NodeJS中一个JS文件中方法通过exports可以在其他文件中进行require这种机制,不就类似Java中import(导入架包/引用类)?不就类似C#中Using(DLL组件或者引用类)么?
  MVC模式下Web开发,其中对应在NodeJS中的路由(Router)不就是Controller? 其它M/V中想想都是一样,这样去一类比其实上手就赶脚一通百通
  接下来就是些特定语言有特定的实现方式语法及特色
  个人觉得在复杂的工程:其实前后端分离后,不就是后端怎么CRUD数据?前端怎么去使用接口回显数据对其交互等等;
  工程的复杂性主要体现在业务逻辑实现/数据安全/Web性能/体验等等等吧
  ----扯多了-----------------------------------------------------
  //在接触学习中,首先尝试了怎么去搭建工程连接数据库
  下面就练手Test 做一个简单的Demo总结一下
  适合新手刚开始接触的人
  在Demo中主要是实现了怎么连接MongoDB数据库以及从数据库回显数据/还有往数据库中写入数据
  //算是入门级的Demo走通了数据录入及回显
  如下图:左侧展示录入的数据//右侧填写数据后点击OK 按钮数据就写入数据库
DSC0000.png

  测试的录入的数据
DSC0001.png

  //------------------------------------------------------------------------------------------------------------------------------------------------------------
  首先环境安装啥的在理就不在赘述哈
  创建Express 【Ejs模板的】工程 及Npm MongoDB 后 搭建对应文件夹【图中我的工程里面就加了一个Models】
  关于其他文件夹百度上有很多对应说明介绍
DSC0002.png

  //工程中我就采用默认路由 Index 【另外一个Users 我在程序入口 App.js中注释掉了(没啥业务含量用不上)】
  首先是Models目录中
  创建了个连接MongoDB数据库及构建数据
  【上图中 TestDB.js 内容】
  

/**  

  * Created by Yi on 2017/5/8.  

  */  

  
//testDB Model
  

  
//创建 mongodb数据库连接
  

  
var mongoose = require('mongoose');
  
var DB = mongoose.connect('mongodb://localhost:27017/testAppDB');//红色为数据库名
  

  
//
  
mongoose.connection.on("open", function () {
  
     console.log("数据库连接成功");
  
});
  

  
//
  
mongoose.connection.on("error", function (error) {
  
     console.log("数据库连接失败" + error);
  
});
  

  //创建数据文档模板【在SQL数据库中 即一个表(列名字段等) NoSQL数据库中即数据文档(成员变量名)】
  
var testSchema = new mongoose.Schema({
  
     SortID: {type: String},
  
     Name: {type: String},
  
     Sex: {type: String},
  
     Address: {type: String},
  
     timeDate: {type: Date, default: Date.now()}
  
});
  

  
module.exports = mongoose.model('TestModel', testSchema);
  

  //下面在构造一个数据Model“类”
  

/**  

  * Created by Yi on 2017/5/8.  

  */  

  
// 上传/回显数据通用 数据Model
  
var tempModel = {
  
     SortID: "",
  
     Name: "",
  
     Sex: "",
  
     Address: "",
  
     timeDate: ""
  
};
  

  
module.exports = tempModel;
  

  Router【即 Controller 层】
  

var express = require('express');  

var router = express.Router();  

  
//引用连接数据库Model
  
var TestModel = require('../models/testDB');
  

  
// test 数据
  

  
// var resData = [];
  
// resData.push(
  
//     {
  
//         SortID: "1",
  
//         Name: "A",
  
//         Sex: "女",
  
//         Address: "SSS",
  
//         timeDate: "05-08"
  
//     }
  
// );
  
// resData.push(
  
//     {
  
//         SortID: "2",
  
//         Name: "B",
  
//         Sex: "男",
  
//         Address: "XXX",
  
//         timeDate: "05-08"
  
//     }
  
// );
  

  
// 初始化回显 数据库已录入数据
  
router.get('/', function (req, res, next) {
  
     // res.render('testDB', {title: 'Express'});
  
     TestModel.find({}, function (err, resData) {
  
         if (err) return next(err);
  
         res.render('index', {

  
            >  
             testData: resData
  
         });
  
     });
  
});
  

  
//1 可以直接用Form表单方式提交数据
  
//2 或者通过页面脚本绑定事件响应结合JQuery的Ajax
  
//  实现调用路由(controller)接口将数据写入数据库
  //一般开发中会在页面脚本中调用很多其他或者外部接口//【该方式比较常用 即就把路由方法当成一个对外的接口】
  

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

     var params = req.body;  

    //MogoDB中可以用Create方法添加数据  
     TestModel.create(params, function (err) {
  
         if (err) res.end('{result:-1}');
  
         else {
  
             TestModel.find({}, function (error, data) {
  
                 if (error) res.end('{result:-1}');
  
                 else {
  
                     res.end('{result:1,data:' + data + '}');
  
                 }
  
             });
  
         }
  
     });
  
});
  
module.exports = router;
  

  View
  我这直接在Index中修改页面【创建Express时采用的Ejs模板】当然用Html的也可以都是一样的
  

<!doctype html>  
<html>
  
<head>
  
     <meta charset="UTF-8">

  
     <title><%=>
  
     <link>  
</head>
  
<body>
  

  
<div>
  
     <h4>此处展示 录入的数据 (用Ejs模板方式)</h4>
  
     <span>多条数据采用forEach处理</span>
  
     <% testData.forEach(function(testModel){ %>
  
     <ul>
  
         <li><span>编号</span><span><%= testModel.SortID %></span></li>
  
         <li><span>姓名</span><span><%= testModel.Name %></span></li>
  
         <li><span>性别</span><span><%= testModel.Sex %></span></li>
  
         <li><span>地址</span><span><%= testModel.Address %></span></li>
  
     </ul>
  
     <% }) %>
  

  
</div>
  
<div>

  
     <h4>采用 <%=>  
     <hr>
  
     <div><span>编号</span><input type="text" placeholder="编号"/></div>
  
     <div><span>姓名</span><input type="text" placeholder="姓名"/></div>
  
     <div><span>性别</span><input type="text" placeholder="性别"/></div>
  
     <div><span>地址</span><input type="text" placeholder="地址"/></div>
  
     <button>OK</button>
  
</div>
  

  

  
</body>
  
<script type="text/javascript" src="/plug-in/jquery-1.9.1.js"></script>
  
<script type="text/javascript" src="/js/testPage.js"></script>
  

<!--页面JS如下-->  

  </html>  

  页面脚本:JS
  

var tempModel = {  

     SortID: "",  

     Name: "",  

     Sex: "",  

     Address: "",  

     timeDate: ""  
};
  

  
$(function () {
  
     $("#uploadData").on("click", function () {
  
         alert("上传数据到MongoDB中");
  
         //构造数据类
  
         tempModel.SortID = $("#SortID").find("input").val();
  
         tempModel.Name = $("#Name").find("input").val();
  
         tempModel.Sex = $("#Sex").find("input").val();
  
         tempModel.Address = $("#Address").find("input").val();
  
         tempModel.timeDate = Date.now();
  

  
         //通过Ajax更新数据
  
         $.ajax({
  
             type: 'post',
  
             // url: "http://localhost:3000/insert",
  
             url: "/insert",
  
             dataType: "json",
  
             data: tempModel,
  
             success: function (resData) {
  
                 if (resData.result == 1) {
  
                     //更新页面列表
  
                     alert('resData');
  
                 }
  
             },
  
             error: function (error) {
  
                 alert('error:' + error);
  
             }
  
         });
  
     });
  
});
  

  //现在在回过来想想,结合常规MVC模式的Web开发去类比,这不就是一回事哈~~
  //初版Demo
  //后期NodeJS学习了解中会根据掌握,继续添加相应模块

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424259-1-1.html 上篇帖子: 用Node.JS+MongoDB搭建个人博客(成品展示) 下篇帖子: MongoDB+MongoVUE安装及入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表