摘要:前幾天寫(xiě)了路由的前端設(shè)置,也是的必要條件,既然前端路由設(shè)置好了,那么后端勢(shì)必也要有路由系統(tǒng)相配套。這里不涉及排查重復(fù)路由,當(dāng)然添加上去也是很簡(jiǎn)單的。接下來(lái)要做的就是前端路由和后端路由相配合。
前幾天寫(xiě)了路由的前端設(shè)置,也是spa的必要條件,既然前端路由設(shè)置好了,那么后端勢(shì)必也要有路由系統(tǒng)相配套。這里以nodejs為例,簡(jiǎn)單的路由實(shí)現(xiàn),參考了一些網(wǎng)上的文章以及express等開(kāi)源庫(kù),是很簡(jiǎn)單的路由實(shí)現(xiàn)。
這里不涉及排查重復(fù)路由,當(dāng)然添加上去也是很簡(jiǎn)單的。
先是index.js的代碼:
var server=require("./server"); var app = server.router(); app.set("/demo",function () { return "demo"; }) app.set("/test",function () { return "test"; }) app.start()
從上面大概可以看到router的api了,只有兩個(gè)api,一個(gè)是set,一個(gè)是start,set負(fù)責(zé)設(shè)置路由,start負(fù)責(zé)啟動(dòng)服務(wù)器。
然后是server.js:
var http = require("http"); var url = require("url"); var router = function () { function App () { this.path={}; } App.prototype = { set : function (route,handler) { this.path[route]=handler; }, start: function () { var path = this.path function handleRequest (req,res) { if( typeof path[req.url] === "function" ){ var content = path[req.url](); }else { var content = "404 Not Found"; } var pathname = url.parse(req.url).pathname; console.log("request for " + pathname +"recevied"); res.write(content); res.end(); } http.createServer(handleRequest).listen(3000,()=>{console.log("port 3000");}) } }; return new App(); } exports.router = router;
如上,可以看到引入了url和http模塊,url負(fù)責(zé)解析pathname,http負(fù)責(zé)創(chuàng)建服務(wù)器,最后返回App的實(shí)例,this.path里存儲(chǔ)著已經(jīng)在設(shè)置好的路由及其回調(diào)函數(shù),這邊僅僅是簡(jiǎn)單的返回一個(gè)值,具體還要更改。至于start里的handleRequest就是具體返回內(nèi)容了,具體可以看http的相關(guān)api。就這簡(jiǎn)單的代碼就是一個(gè)初級(jí)的路由模塊。
當(dāng)然還有更多的功能可以實(shí)現(xiàn)。比如渲染模板,類(lèi)似flask的render_template
代碼如下:
var fs = require("fs"); var path = require("path"); function renderTemplate (file) { var html = fs.readFileSync(path.dirname()+"/templates/"+file).toString(); return html; } module.exports=renderTemplate
都是很簡(jiǎn)單的實(shí)現(xiàn)。雖然沒(méi)有具體看express的渲染部分,不過(guò)我估計(jì)也是差不多的。
app.set("/demo",function () { return renderTemplate("index.html") })
我這里是先放在templates的文件夾里,模仿flask。大概如此。
接下來(lái)要做的就是前端路由和后端路由相配合。構(gòu)成spa的雛形。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79226.html
摘要:由于能力有限本示例不會(huì)完全自定義適配器和序列化器,示例仍然是使用官方推薦方式,重寫(xiě)或者擴(kuò)展以實(shí)現(xiàn)自定適配器和序列化器。在序列化器中調(diào)用響應(yīng)請(qǐng)求的方法格式化返回的數(shù)據(jù)。上述就是的一個(gè)簡(jiǎn)單實(shí)用示例。 文章來(lái)源:http://xcoding.tech/tags/Emberjs歡迎訪(fǎng)問(wèn)源網(wǎng)站Ember Teach,Ember Teach致力于為您提供最權(quán)威、最前沿的Ember技術(shù)教程。。 ad...
摘要:結(jié)構(gòu)大致為安裝如果檢測(cè)到多個(gè)會(huì)報(bào)錯(cuò),可以用指定一個(gè)指定啟動(dòng)因?yàn)樾枰{(diào)用,所以需要把映射到容器內(nèi)部,如果你使用了,那么需要設(shè)置對(duì)應(yīng)的。我這里是啟動(dòng)服務(wù),這里需要注意的是這些環(huán)境變量,作用是的默認(rèn)值,見(jiàn)名知意,在文檔中有詳細(xì)介紹。 基于容器的后端服務(wù)架構(gòu) 在探索kubernetes的應(yīng)用時(shí),調(diào)研了幾個(gè)gateway,發(fā)現(xiàn)fabio支持發(fā)現(xiàn)服務(wù),自動(dòng)生成路由,結(jié)合consul,registr...
摘要:所以,這次就來(lái)聊聊組件的服務(wù)器端渲染。這種模式下,后端只提供接口,傳統(tǒng)的服務(wù)器端路由模板渲染則都有層接管。這樣,前端開(kāi)發(fā)人員可以自由的決定哪些組件需要在服務(wù)器端渲染,哪些組件可以放在客戶(hù)端渲染,前后端完全解耦,但又保留了服務(wù)器端渲染的功能。 細(xì)說(shuō) Vue 組件的服務(wù)器端渲染 聲明:需要讀者對(duì) NodeJs、Vue 服務(wù)器端渲染有一定的了解 現(xiàn)在,前后端分離與客戶(hù)端渲染已經(jīng)成為前端開(kāi)發(fā)的...
為什么要用Keepalived來(lái)實(shí)現(xiàn)負(fù)載均衡器高可用,這里只拿HaProxy負(fù)載均衡器來(lái)進(jìn)行說(shuō)明:對(duì)于所有懂運(yùn)維的小伙伴來(lái)說(shuō),都應(yīng)該知道,無(wú)論后端的服務(wù)器都強(qiáng)大,這里的后端服務(wù)器說(shuō)的是真正提供服務(wù)的主機(jī),負(fù)載均衡器后面有緩存服務(wù)器,緩存服務(wù)器后面才是真正提供服務(wù)的服務(wù)器。而這個(gè)服務(wù)器小編稱(chēng)它為"后端服務(wù)器",而在這后端服務(wù)器后面是我們的數(shù)據(jù)緩存服務(wù)器,之后是數(shù)據(jù)庫(kù),也是整個(gè)企業(yè)的命脈。這整個(gè)架構(gòu)是...
閱讀 3152·2021-11-23 10:02
閱讀 3122·2021-11-16 11:53
閱讀 3097·2021-09-23 11:21
閱讀 3376·2019-08-30 13:02
閱讀 1632·2019-08-29 16:18
閱讀 1567·2019-08-29 12:55
閱讀 1460·2019-08-26 12:24
閱讀 2092·2019-08-26 10:36