node+js搭建時間服務(wù)器的思路詳解
時間服務(wù)器
時間服務(wù)器
1.思路準備
1.1思路來源
這是在我的軟件老師給的期末課程設(shè)計
他要的是通過自己的知識儲備,來設(shè)計一個
前后端數(shù)據(jù)的展示與發(fā)送
1.2思路前提要求
1.搭建一個前臺頁面,要求簡單易懂
2.搭建服務(wù)器,用于向前端發(fā)送需要的數(shù)據(jù)
3.點擊數(shù)據(jù)展示,顏色改變,雙擊切換一些背景顏色
1.3技術(shù)要求
1.熟悉node,熟練掌握fs的使用
2.了解用express搭建后臺服務(wù)器,了解怎么向前臺發(fā)送數(shù)據(jù)
3.要有全局意識,將需要改變的顏色設(shè)置用var()來設(shè)置顏色
4.熟悉數(shù)組的方法,了解怎么通過數(shù)組方法處理數(shù)據(jù)
5.了解echarts的使用
6.熟悉ajax的使用
2.實現(xiàn)
2.1實現(xiàn)準備
在這里我通過一款軟件,來實現(xiàn)準備設(shè)計來實現(xiàn)項目的計劃樣子。軟件就是Pixos
在這里我希望你們在進行一個項目的設(shè)計之前一定要做一些前提準備,設(shè)計一個草圖
2.2搭建前臺頁面
關(guān)于這個前端頁面,相信各位的實力,應(yīng)該不難
搭建好的前端頁面如下:
2.3搭建后臺服務(wù)器
2.3.1搭建后臺
在項目中下載express npm i express --save
//搭建好了一個本地服務(wù)器 //端口號為8000 const express=require('express') const fs=require('fs') const app=express() app.listen(8000,()=>{ console.log("開啟成功") })
2.3.2后臺處理要發(fā)送的數(shù)據(jù)
在后臺需要發(fā)送的數(shù)據(jù)有兩種
1.實時的年月日,以及當前的時間
2.實時的七天天氣信息
2.3.2.1實時時間
通過實例化Date()函數(shù)就可以實現(xiàn)。
然后通過對應(yīng)的函數(shù)獲得時間信息。
然后對數(shù)據(jù)進行JSON化,發(fā)送時處理數(shù)據(jù)格式
在這里我們會設(shè)置一個接口,用于前端獲取數(shù)據(jù)。
/timeDate接口
app.get('/timeDate',(req,res)=>{ //用于處理跨域問題 res.setHeader('Access-Control-Allow-Origin', '*'); //響應(yīng)頭 res.setHeader('Access-Control-Allow-Headers', '*'); //實例化內(nèi)置Date()庫 var time=new Date() //得到年 const year=time.getFullYear() const mouth=time.getMonth()+1 const day=time.getDate() const hour=time.getHours() const min=time.getMinutes() const second=time.getSeconds() //將數(shù)據(jù)json化,傳輸數(shù)據(jù) const TimeDate={year,mouth,day,hour, min,second} //向客戶端發(fā)送數(shù)據(jù) res.send(JSON.stringify(TimeDate)) })
2.3.2.2七天天氣信息
這個七天的信息都是通過網(wǎng)上數(shù)據(jù)得到的。
在官網(wǎng)天氣官網(wǎng)你能獲取每天的實時信息。
你也可以通過我創(chuàng)建的數(shù)據(jù)接口獲得數(shù)據(jù)接口
由于考慮到請求的時間問題,我將數(shù)據(jù)存儲在data.json中
用于來提高數(shù)據(jù)請求與發(fā)送的時間。
實現(xiàn)的就是通過fs模塊讀取數(shù)據(jù),然后來得到數(shù)據(jù),
創(chuàng)建接口,向前端發(fā)送數(shù)據(jù)
然后就是后臺代碼:
fs.readFile('./data.json',(err,data)=>{ if(err) return console.log('err') let result=JSON.parse(data) app.get('/weatherDate',(req,res)=>{ res.setHeader('Access-Control-Allow-Origin', '*'); //響應(yīng)頭 res.setHeader('Access-Control-Allow-Headers', '*'); res.send(result) }) })
2.4前端處理獲取的數(shù)據(jù)
2.4.1時間數(shù)據(jù)
我們要做的就是獲得到時間數(shù)據(jù)。
將其展示到對應(yīng)的位置。
1.時鐘表 2.時間顯示
先得到對應(yīng)的DOM結(jié)構(gòu),然后設(shè)置js與css樣式
處理流程就是:
綁定點擊事件==》通過ajax獲取接口數(shù)據(jù)==》得到對應(yīng)的DOM接口 =+=》插入數(shù)據(jù),設(shè)置css樣式
/*渲染時鐘*/ //獲得時,分,秒的DOM結(jié)構(gòu) const hours=document.querySelector(".hour") const mins=document.querySelector('.min') const seconds=document.querySelector('.seconds') //獲得六個空地方的DOM結(jié)構(gòu) const item1=document.querySelector('.item1') const item2=document.querySelector('.item2') const item3=document.querySelector('.item3') const item4=document.querySelector('.item4') const item5=document.querySelector('.item5') const item6=document.querySelector('.item6') //綁定點擊事件 const bottom=document.getElementById('bottom') bottom.addEventListener('click',timeshow) function timeshow(){ let xhr=new XMLHttpRequest() xhr.open("GET",'http://localhost:8000/timeDate') xhr.send() xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status >= 200 && xhr.status < 300) { //對請求的數(shù)據(jù)結(jié)構(gòu)化 let result =JSON.parse(xhr.response); //得到時 let hour = result.hour const hourDeg = (hour / 12) * 360 + 90 hours.style.transform = `rotate(${hourDeg}deg)`; //得到分 let min = result.min const minDeg = (min / 60) * 360 + 90 mins.style.transform = `rotate(${minDeg}deg)` //得到秒 let second = result.second const secondDeg = (second / 60) * 360 + 90 seconds.style.transform = `rotate(${secondDeg}deg)` //將數(shù)據(jù)插入指定的位置 item1.innerHTML =result.year item2.innerHTML =result.mouth item3.innerHTML = result.day item4.innerHTML =result.hour item5.innerHTML = result.min item6.innerHTML = result.second } else { console.log("err") } } } }
2.4.2天氣信息
我只是獲取了天氣信息的data部分。
需要的數(shù)據(jù)就是。
1.七天的時間,以及他們對應(yīng)的最高,最低溫度
2.七天的溫度,以及對應(yīng)的溫馨提示信息。
時間的高低我用柱狀圖表示。
溫度及提示用餅圖表示
設(shè)置echarts圖表時,最重要的時data數(shù)據(jù),其他的輔助信息可根據(jù)管網(wǎng)提示來設(shè)置
2.4.2.1時間數(shù)據(jù)處理
獲得接口數(shù)據(jù),得到對應(yīng)的值
let xhr=new XMLHttpRequest() xhr.open("GET",'http://localhost:8000/timeDate') xhr.send() xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status >= 200 && xhr.status < 300) { var result=JSON.parse(xhr.response) var data=result.data console.log(data) //由于得到的數(shù)據(jù)是數(shù)組, //而option的data數(shù)據(jù)的格式是json格式。 //所以需要將數(shù)據(jù)加工 const maxMINArr=data.map((item)=>{ return {product:item.date,最低溫度:item.tem1,最高溫度:item.tem2} }) } //echarts中的option的屬性設(shè)置 dataset: { dimensions: ['product', '最高溫度', '最低溫度'], source:maxMINArr },
2.4.2.2溫度及提示
需要注意的是由于得到的數(shù)據(jù)是
數(shù)組,而echarts的option設(shè)置的數(shù)據(jù)
需要的是json類的形式,所以
需要對數(shù)據(jù)json化
let xhr=new XMLHttpRequest() xhr.open("GET",'http://localhost:8000/timeDate') xhr.send() xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status >= 200 && xhr.status < 300) { var result=JSON.parse(xhr.response) const dataArr=data.map(item=>{ return {value:item.tem,name:item.date,level:item.air_level,tips:item.index[3]} }) //echarts中的option的屬性設(shè)置 tooltip:{ show:true, //提示信息json化數(shù)據(jù) formatter: function(arg){ return arg.data.name+' : '+arg.data.value+'c'+' : '+arg.data.level+' : '+arg.data.tips.desc } }, series: [ { name: 'Access From', type: 'pie', radius: '50%', data:dataArr, emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }
2.5效果展示
時間服務(wù)器
3.總結(jié)
1.了解node的fs模塊怎么讀取數(shù)據(jù)
2.了解express怎么搭建服務(wù)器,設(shè)置數(shù)據(jù)接口
3.學會echarts的設(shè)置與使用
4.了解怎么改變?nèi)诸伾?br />5.了解ajax怎么處理后臺數(shù)據(jù)
到此這篇關(guān)于node+js搭建時間服務(wù)器的文章就介紹到這了,更多相關(guān)node時間服務(wù)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node.js用fs.rename強制重命名或移動文件夾的方法
本篇文章主要介紹了node.js用fs.rename強制重命名或移動文件夾的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12node.js中的fs.appendFileSync方法使用說明
這篇文章主要介紹了node.js中的fs.appendFileSync方法使用說明,本文介紹了fs.appendFileSync方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下2014-12-12npm?install?-g?@vue/cli常見問題解決匯總
這篇文章主要給大家介紹了關(guān)于npm?install?-g?@vue/cli常見問題解決的相關(guān)資料,文中通過實例代碼將解決的方式介紹的非常詳細,對遇到這個問題的朋友具有一定的參考學習價值,需要的朋友可以參考下2022-08-08淺談node如何優(yōu)雅地獲取mac系統(tǒng)版本
這篇文章主要和大家聊聊node如何優(yōu)雅地獲取mac系統(tǒng)版本,文中有詳細的代碼示例和流程步驟,對我們學習或工作有一定的幫助,需要的朋友可以參考下2023-06-06推薦 21 款優(yōu)秀的高性能 Node.js 開發(fā)框架
Node.js是JavaScript中最為流行的框架之一,易于創(chuàng)建可擴展的Web應(yīng)用。Node.js包含不同類型框架,包括MVC, full-stack,REST API以及Generators。借助這些框架使Node.js更加易于使用,它還支持眾多特性功能,只需幾個步驟就可快速搭建強大的Web應(yīng)用。本文為大家推薦21款2014-08-08