本demo主要實現的功能是使用前端表格輸入相關數據,將數據經過Ajax請求發送至nodejs中,在經由php發送至數據庫中,而後在從數據庫中經過php將數據取出,經由nodejs發送至頁面中。nodejs起中間件的做用。
主要使用的技術有:javascript
在命令行使用npm init
初始化項目文件夾,填寫項目名稱等一系列,或者一路enter
,結束後項目文件會出現一個新文件package.json
,就是剛纔填寫的或默認的數據。php
在FEtoBE 文件夾下建立 views
和 public
文件夾,在views
文件夾下建立add_data.html
文件,做爲寫入數據的窗口,此處,建立了一個表格,模擬補習班四個課程天天新增報名人數,以及總的報名人數。整體效果以下圖所示(未作兼容性及美化):
表格文件在Github上。css
此步的整體流程爲:給表格中的按鈕「點擊添加」添加事件,使其經過點擊事件,發送Ajax請求,將表格中的數據經過get方法傳輸到Node某路由中。
因此此處須要建立node文件,並使用express
模板來建立相應路由(保證電腦中已安裝node)。html
express
: npm install express --save;swig
模板:npm install express --save;FEtoBE
文件夾下建立 app.js
文件,並引入express
以及swig
、path
;此時文件結構:前端
繼續在app.js
中書寫,配置模板引擎,node模板引擎文件位置:html5
//配置模板引擎爲 html,做用是告訴node模板引擎文件位置 app.set('views','./views/'); app.set('view engine','html'); app.engine('html', swig.renderFile); // 設置靜態文件路徑 app.use(express.static(path.join(__dirname, 'public')));
繼而設置路由,用來接受add_data.html
傳來的數據,以及端口:java
// 設置添加數據界面的路由 app.get('/adding', function(req, res) { res.render('add_data') }); //設置路由,接收數據 app.get('/addData', function(req, res) { console.log(req.query.mathNum);//驗證是否成功傳輸數據 }) //設置端口 var server = app.listen(3000, function() { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port); });
此時,須要的add_data.html
文件中,使用ajax來發送數據:node
<script type="text/javascript"> $('#submit-button').on('click',function(){ e.preventDefault(); $.ajax({ //url的內容端口號爲app.js中設置的端口號 url:'http://localhost:3000/addData', type:'get', dataType:'json', data:{ 'mathNum':$('#number-one').val(), //等等 }, success:function(result){ console.log('success'); }, error:function(XHR,textStatus,errorThrown){ console.log(XHR.status); console.log(XHR.readyState); console.log(textStatus); } }) }) </script>
當上兩步完成以後,在命令行中啓動:node app.js
,在瀏覽器中輸出以前設置的添加數據界面的路由,本例中爲「 http://localhost:3000/adding 」,能夠看到瀏覽器中已經展現了表格,輸入數據以後,點擊按鈕,就能夠在命令行中看到測試的數據顯示出來。說明咱們已經能夠將數據從前端界面穿輸入nodejs中,下一步即時從nodejs傳輸入php,在經php最終傳入數據庫。git
經過封裝一個數據庫類,實現數據庫的增長、查找等(此處在xampp中的默認路徑建立database
文件夾)。github
建立DB.php
文件,建立封裝類。具體代碼:在Github中查看。
建立get.php
文件。本文件的做用是將nodejs中傳來的數據寫入到數據庫中。因此此時數據庫中應該有相應接收數據的表格(此處爲forfetobe
數據庫下的classData
數據表格)。
具體代碼:在Github中查看。
上兩步的php文件建立完畢以後,將其部署到服務器上。須要使用 request
模塊在nodejs中進行http請求。
首先進行安裝:npm install request --save
,在app.js
中引入此模塊:var request = require('request');
因此能夠在接收數據的路由中addData
中添加request
請求,將數據發送到get.php
中,再由其發送到相應數據庫中:
// 設置路由,用來接受add_data.html傳來的數據 app.get('/addData', function(req, res) { var responseData = "mathNum=" + req.query.mathNum + '&' + '等等。。。。。。'; //此處注意傳輸的responseData應該爲字符串形式,且格式與get請求在瀏覽器地址欄的格式相一致。 request('http://localhost/database/get.php?' + responseData, function(error, response, body) { }); })
具體代碼在Github上查看。
此時,打開相應服務,表格中添加數據,便可以傳輸到數據庫中的相應數據表裏。
上一節文章中,寫到從前端寫入的數據,經由Nodejs傳給php,在由php寫入到數據庫中。本節文章主要寫從數據庫將數據拿出來展現到前端去(繼續上一節的demo)。
上一節中封裝了一個PDO類,也就是DB.php
文件。建立此類的一個實例,用來查詢數據庫中的數據。
依舊是在xampp中的默認路徑建立database文件夾下,新建back.php
,進行數據庫相應數據表的查詢,具體代碼:在GitHub上 查看。
經過上面的php能夠將數據拿回至php,如今須要將數據 經由nodejs,再將其發送到前端頁面上,須要在app.js
中設置相關路由。
//設置路由,用來將數據展現到頁面中去 app.get('/showing', function(req, res) { res.render('show_data') });
這個沒啥說的,和上一篇中的設置數據寫入界面路由相同。都是設置在views
文件夾下新建相應的html文件,此處是show_data.html
。
//設置路由,做用是未來自‘show_data.html’的ajax請求,並將數據庫中的數據經過PHP發送至此 app.get('/showData', function(req, res) { var responseData = "mathNum=" + req.query.mathNum + '&' + //等等 request('http://localhost/database/back.php?' + responseData, function(error, response, body) { res.json(body);//必須。將數據吐出。 }); });
如今即須要書寫show_data.html
界面,接收數據。
此處須要在public
文件夾下建立scripts
、 css
、 images
等文件夾來存放相應的靜態資源文件。在將靜態文件 .css
、.js
、img
放入到public
文件夾下的相應路徑中去。
此時項目文檔結構爲:
引入路徑爲:
//show_data.html文件內的樣式文件引入路徑展現。 <link rel="stylesheet" type="text/css" href="css/layout.css">
在書寫完總體的展現界面後,(詳細代碼在:GitHub上查看), 就須要將數據傳輸到頁面中去。
在相應的位置書寫ajax請求,將showData
路由上的數據發送到頁面:
$(function() { $.ajax({ url: 'http://localhost:3000/showData', dataType: "json", success: function(point) { var jsondata = JSON.parse(point); var datalength = jsondata.length; //提取數據庫裏最近七天內的數據 var nowAll = Number(jsondata[datalength - 1]["atotalnum"]); var nowIncrease = Number(jsondata[datalength - 1]["aincreasenum"]); //。。。 var sevenAll = Number(jsondata[datalength - 7]["atotalnum"]); var sevenIncrease = Number(jsondata[datalength - 7]["aincreasenum"]); //如下是使用highcharts 建立表格。 //具體代碼在Github上查看。 })
至此,一個完整的將前端數據經過ajax的get方式發送到Nodejs中,在經由php發送到數據庫中,而後再從數據庫中拿取最新的數據,展現到界面中。
整個的展現流程爲:
進入登陸界面:
其中輸入錯誤的密碼或未註冊的用戶名均會獲得提示:
查看展現界面:
查看展現界面,沒門課程均有單獨的展現界面 以及相應的數據。且是響應式,適合在手機端瀏覽。還能夠在左側的功能欄找到添加數據接口。
添加數據:
添加成功後點擊確認 添加按鈕,便可在展現界面查看最新數據。