近期在看NodeJS相關javascript
不得不說NodeJS+Express 進行網站開發是很不錯,對於喜歡玩JS的來講真是很好的一種Web開發組合css
在接觸NodeJS時受平時Java或者C#中API接口等開發的思惟慣性,類比着去學習瞭解發現其實不少都是通性的html
特別是NodeJS中一個JS文件中方法經過exports能夠在其餘文件中進行require這種機制,不就相似Java中import(導入架包/引用類)?不就相似C#中Using(DLL組件或者引用類)麼?前端
MVC模式下Web開發,其中對應在NodeJS中的路由(Router)不就是Controller? 其它M/V中想一想都是同樣,這樣去一類比其實上手就趕腳一通百通java
接下來就是些特定語言有特定的實現方式語法及特點jquery
我的以爲在複雜的工程:其實先後端分離後,不就是後端怎麼CRUD數據?前端怎麼去使用接口回顯數據對其交互等等;ajax
工程的複雜性主要體如今業務邏輯實現/數據安全/Web性能/體驗等等等吧mongodb
----扯多了-----------------------------------------------------數據庫
//在接觸學習中,首先嚐試了怎麼去搭建工程鏈接數據庫express
下面就練手Test 作一個簡單的Demo總結一下
適合新手剛開始接觸的人
在Demo中主要是實現了怎麼鏈接MongoDB數據庫以及從數據庫回顯數據/還有往數據庫中寫入數據
//算是入門級的Demo走通了數據錄入及回顯
以下圖:左側展現錄入的數據//右側填寫數據後點擊OK 按鈕數據就寫入數據庫
測試的錄入的數據
//------------------------------------------------------------------------------------------------------------------------------------------------------------
首先環境安裝啥的在理就不在贅述哈
建立Express 【Ejs模板的】工程 及Npm MongoDB 後 搭建對應文件夾【圖中個人工程裏面就加了一個Models】
關於其餘文件夾百度上有不少對應說明介紹
//工程中我就採用默認路由 Index 【另一個Users 我在程序入口 App.js中註釋掉了(沒啥業務含量用不上)】
首先是Models目錄中
建立了個鏈接MongoDB數據庫及構建數據
【上圖中 TestDB.js 內容】
1 /** 2 * Created by Yi on 2017/5/8. 3 */ 4 5 //testDB Model 6 7 //建立 mongodb數據庫鏈接 8 9 var mongoose = require('mongoose'); 10 var DB = mongoose.connect('mongodb://localhost:27017/testAppDB');//紅色爲數據庫名 11 12 // 13 mongoose.connection.on("open", function () { 14 console.log("數據庫鏈接成功"); 15 }); 16 17 // 18 mongoose.connection.on("error", function (error) { 19 console.log("數據庫鏈接失敗" + error); 20 }); 21
//建立數據文檔模板【在SQL數據庫中 即一個表(列名字段等) NoSQL數據庫中即數據文檔(成員變量名)】 22 var testSchema = new mongoose.Schema({ 23 SortID: {type: String}, 24 Name: {type: String}, 25 Sex: {type: String}, 26 Address: {type: String}, 27 timeDate: {type: Date, default: Date.now()} 28 }); 29 30 module.exports = mongoose.model('TestModel', testSchema);
//下面在構造一個數據Model「類」
1 /** 2 * Created by Yi on 2017/5/8. 3 */ 4 5 // 上傳/回顯數據通用 數據Model 6 var tempModel = { 7 SortID: "", 8 Name: "", 9 Sex: "", 10 Address: "", 11 timeDate: "" 12 }; 13 14 module.exports = tempModel;
Router【即 Controller 層】
1 var express = require('express'); 2 var router = express.Router(); 3 4 //引用鏈接數據庫Model 5 var TestModel = require('../models/testDB'); 6 7 // test 數據 8 9 // var resData = []; 10 // resData.push( 11 // { 12 // SortID: "1", 13 // Name: "A", 14 // Sex: "女", 15 // Address: "SSS", 16 // timeDate: "05-08" 17 // } 18 // ); 19 // resData.push( 20 // { 21 // SortID: "2", 22 // Name: "B", 23 // Sex: "男", 24 // Address: "XXX", 25 // timeDate: "05-08" 26 // } 27 // ); 28 29 // 初始化回顯 數據庫已錄入數據 30 router.get('/', function (req, res, next) { 31 // res.render('testDB', {title: 'Express'}); 32 TestModel.find({}, function (err, resData) { 33 if (err) return next(err); 34 res.render('index', { 35 title: "TestDB", 36 testData: resData 37 }); 38 }); 39 }); 40 41 //1 能夠直接用Form表單方式提交數據 42 //2 或者經過頁面腳本綁定事件響應結合JQuery的Ajax 43 // 實現調用路由(controller)接口將數據寫入數據庫
//通常開發中會在頁面腳本中調用不少其餘或者外部接口//【該方式比較經常使用 即就把路由方法當成一個對外的接口】
45 router.post('/insert', function (req, res) { 46 var params = req.body; 47 //MogoDB中能夠用Create方法添加數據 48 TestModel.create(params, function (err) { 49 if (err) res.end('{result:-1}'); 50 else { 51 TestModel.find({}, function (error, data) { 52 if (error) res.end('{result:-1}'); 53 else { 54 res.end('{result:1,data:' + data + '}'); 55 } 56 }); 57 } 58 }); 59 }); 60 module.exports = router;
View
我這直接在Index中修改頁面【建立Express時採用的Ejs模板】固然用Html的也能夠都是同樣的
1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title><%= title %></title> 6 <link rel="stylesheet" href="/css/style.css"> 7 </head> 8 <body> 9 10 <div id="ShowDataArea"> 11 <h4>此處展現 錄入的數據 (用Ejs模板方式)</h4> 12 <span>多條數據採用forEach處理</span> 13 <% testData.forEach(function(testModel){ %> 14 <ul> 15 <li><span>編號</span><span><%= testModel.SortID %></span></li> 16 <li><span>姓名</span><span><%= testModel.Name %></span></li> 17 <li><span>性別</span><span><%= testModel.Sex %></span></li> 18 <li><span>地址</span><span><%= testModel.Address %></span></li> 19 </ul> 20 <% }) %> 21 22 </div> 23 <div id="ShowArea"> 24 <h4>採用 <%= title %> 測試Node - MongoDB 數據 寫入/修改/刪除/回顯等</h4> 25 <hr> 26 <div id="SortID"><span>編號</span><input type="text" placeholder="編號"/></div> 27 <div id="Name"><span>姓名</span><input type="text" placeholder="姓名"/></div> 28 <div id="Sex"><span>性別</span><input type="text" placeholder="性別"/></div> 29 <div id="Address"><span>地址</span><input type="text" placeholder="地址"/></div> 30 <button id="uploadData">OK</button> 31 </div> 32 33 34 </body> 35 <script type="text/javascript" src="/plug-in/jquery-1.9.1.js"></script> 36 <script type="text/javascript" src="/js/testPage.js"></script>
<!--頁面JS以下-->
37 </html>
頁面腳本:JS
10 var tempModel = { 11 SortID: "", 12 Name: "", 13 Sex: "", 14 Address: "", 15 timeDate: "" 16 }; 17 18 $(function () { 19 $("#uploadData").on("click", function () { 20 alert("上傳數據到MongoDB中"); 21 //構造數據類 22 tempModel.SortID = $("#SortID").find("input").val(); 23 tempModel.Name = $("#Name").find("input").val(); 24 tempModel.Sex = $("#Sex").find("input").val(); 25 tempModel.Address = $("#Address").find("input").val(); 26 tempModel.timeDate = Date.now(); 27 28 //經過Ajax更新數據 29 $.ajax({ 30 type: 'post', 31 // url: "http://localhost:3000/insert", 32 url: "/insert", 33 dataType: "json", 34 data: tempModel, 35 success: function (resData) { 36 if (resData.result == 1) { 37 //更新頁面列表 38 alert('resData'); 39 } 40 }, 41 error: function (error) { 42 alert('error:' + error); 43 } 44 }); 45 }); 46 });
//如今在回過來想一想,結合常規MVC模式的Web開發去類比,這不就是一回事哈~~
//第一版Demo
//後期NodeJS學習瞭解中會根據掌握,繼續添加相應模塊