背景:如今愈來愈多的企業都採用了在開發上先後端分離,先後端開發上的分離有不少種,那麼今天,我來分享一下項目中得的先後端分離。html
B/S Saas 項目:(這個項目能夠理解成我的中心,固然不止這麼點功能)前端
前端:node.js + vuevue
後端:.net core webapinode
前端安裝 node.js 跟建立vue項目這些不是這篇文章的重點,重點在於項目完成後的部署。web
.net core webapi建立後,默認就建立了一個wwwroot的文件夾,這個文件夾是用來放置靜態文件的,因此,咱們能夠理解成,這個文件夾將放置咱們的build好的前端項目。後端
OK,到如今來說,有一個頗有意思的發現(也能夠是一點意思都沒有,由於都是同一個爸生的),這項目的部署跟mvc的部署的很像(這裏不涉及底層運行,只是一個發佈後簡單的像而已)。api
由上圖就足夠清晰了,這樣的部署是屬於開發上的先後端分離,他們同屬於一個站點,綁定同一個域名,因此不涉及跨域,外部不能直接調用webapi(安全上仍是有保證D)。跨域
那麼這樣的部署卻很簡單,僅僅是在 Startup 裏面的 Configure 設置 一下便可安全
//設置主頁 app.UseDefaultFiles(); //這個是.net core webapi 訪問wwwroot文件夾的配置,開啓靜態文件
app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "api/{controller=Login}/{action=Get}/{id?}"); });
一、首先是設置主頁服務器
這裏直接使用的是默認的,就是 UseDefaultFiles 會重定向到 default.htm、default.html、index.htm、index.html。固然你也能夠指定設置的首頁(指定的頁面是能夠自定義的!)
//設置主頁
DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions(); defaultFilesOptions.DefaultFileNames.Clear(); defaultFilesOptions.DefaultFileNames.Add("index.html"); app.UseDefaultFiles(defaultFilesOptions);
這樣就設定了重定向到 index.html,那爲何前面用了 Clear,其實我的認爲僅僅是爲了保險,由於
二、開啓靜態文件,UseDefaultFiles 僅僅是一個重定向URL而不是真的提供一個文件,真正提供靜態文件的仍是 UseStaticFiles。這就是爲何要優先設置 UseDefaultFiles 再到 UseStaticFiles的緣由。固然,提供靜態文件也提供了多個重載,能夠提供一個相對路徑,還有靜態文件目錄的選擇。
//這個是.net core webapi 訪問wwwroot文件夾的配置,開啓靜態文件
StaticFileOptions staticFileOptions = new StaticFileOptions(); staticFileOptions.FileProvider = new Microsoft.Extensions.FileProviders.PhysicalFileProvider(@"D:\testsite\wwwroot\");//指定目錄你站點api的要訪問的wwwroot目錄
app.UseStaticFiles(staticFileOptions);
上面這種寫法也一樣能夠,固然指定的目錄也一樣能夠放到配置文件裏面去,可是這種作法通常都放在相似FTP的項目上。由於若是是指定的目錄脫離了 webapi 項目 wwwroot ,甚至是 wwwroot 下的文件夾都不能夠訪問到靜態頁面的。
三、使用MVC並配置路由,開啓了靜態文件的訪問以後,就交由mvc來處理了,這個是webapi項目,因此配置api的路由就能夠了。(除了上面的一、2順序不能夠改變以外,mvc中配置的路由所放置的順序倒沒影響,由於這不是一個mvc項目)
好了,先後端都開發好以後,部署到服務器,僅是上面在Startup的配置便可。.net core 仍是很是很是方便的。
正常訪問!一點問題都沒有,就算是有問題,也是代碼的問題了,噢哈哈
這就是個人項目中的先後端在開發上分離的實踐,講得不深,隨便拍!