日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

lowcode-cms開源社區源碼設計分享

來源: 責編: 時間:2024-01-25 10:41:57 239觀看
導讀開源背景lowcode可視化社區 是我之前在設計研發 Dooring低代碼 平臺時開發的一個面向低代碼內容分享的知識社區, 內容端采用 SSR 技術來渲染頁面, 對 SEO 更加友好, 同時后端服務采用 Nodejs 來實現, 內容端和服務端

5KM28資訊網——每日最新資訊28at.com

開源背景

lowcode可視化社區 是我之前在設計研發 Dooring低代碼 平臺時開發的一個面向低代碼內容分享的知識社區, 內容端采用 SSR 技術來渲染頁面, 對 SEO 更加友好, 同時后端服務采用 Nodejs 來實現, 內容端和服務端同端, 也就是傳說中的內容服務“同構”. 管理端采用前端最最流行的 React hooks 來實現, 無論是技術人員還是非技術人員, 通過簡單的操作就可以輕松部署一套專屬自己的 CMS 系統。5KM28資訊網——每日最新資訊28at.com

本著滿滿的開源精神, 我對這套 CMS 系統進行了開源, 讓更多技術小白或者非技術人員, 可以輕松部署自己的網站。5KM28資訊網——每日最新資訊28at.com

接下來我會從技術的角度, 分享一下我開源的 lowcode-cms 系統的技術實現, 以及如何本地運行 + 部署這套開箱即用的 CMS 系統。5KM28資訊網——每日最新資訊28at.com

系統設計架構

5KM28資訊網——每日最新資訊28at.com

接下來我會具體和大家介紹一下管理端, 內容端, 服務端的技術架構。內容端架構設計5KM28資訊網——每日最新資訊28at.com

內容端主要用來展現個人或者企業的內容信息, 相當于一個門戶站, 這里為了更好的 SEO, 我采用了模版引擎來渲染 html, 也就是koa-views +  pug 模式, 具體界面如下:5KM28資訊網——每日最新資訊28at.com

5KM28資訊網——每日最新資訊28at.com

當然這只是首頁模塊, 還有諸如行業產品, 最佳實踐, 視頻, 手記等, 這里就不一一介紹了, 大家如果會編程的話, 也可以自定義自己的模塊頁面. 我們接下來看看具體的技術實現。5KM28資訊網——每日最新資訊28at.com

5KM28資訊網——每日最新資訊28at.com

大家可以在github中server的views目錄下看到每個渲染層的具體實現, 這里和大家分享一下 lowcode-cms 搭建的ssr模式。5KM28資訊網——每日最新資訊28at.com

1、配置pug支持

import koa from "koa";import views from "koa-views";// ... (此處省略服務端自治的部分代碼)// 掛載路由glob.sync(`${config.routerPath}/*.js`).forEach((item) => {  require(item).default(router, config.API_VERSION_PATH);});//使用模版引擎app.use(views(resolve(__dirname, "./views"), { extension: "pug" }));app.use(router.routes()).use(router.allowedMethods());

2、ssr路由數據直出

這塊主要是基于用戶發起的請求, 在服務端格式化好數據供 pug 消費:5KM28資訊網——每日最新資訊28at.com

/** * 文章路由 * @param {*} router * @param {*} apiPath */const pageRenderRouter = (router) => {  // api路徑  const api = {    // 渲染首頁    index: "/",    // 最佳實踐列表    bestPractice: "/best-practice",    product: "/product",    video: "/video",    note: "/note",    login: "/login",    // 其他渲染路由...  };  // 內容端導航配置  const nav = [    {      id: "0",      title: "最佳實踐",      link: "/best-practice"    },    {      id: "1",      title: "行業產品",      link: "/product"    },    {      id: "3",      title: "視頻",      link: "/video"    },    {      id: "4",      title: "手記",      link: "/note"    },    {      id: "5",      title: "關于",      link: "/about"    },  ]  const copyright = "版權所有 @lowcode可視化社區"  // 登錄  router.get(api.login, async (ctx) => {    await ctx.render("login", {      url: api.login,      title: "登錄",      description: "新用戶?",      href: "去注冊",      firstInput: "郵箱",      twoInput: "密碼",      btnText: "登錄",      logoText: "Dooring低代碼社區",    });  });  // 渲染首頁  router.get(api.index, async (ctx) => {    const filePath = `${config.publicPath}/db/homeConfig.json`;    const articlesPath = `${config.publicPath}/db/article_index.json`;    const productsPath = `${config.publicPath}/db/product_index.json`;    const videosPath = `${config.publicPath}/db/video_index.json`;    const homeConfig = RF(filePath);    const articles = RF(articlesPath);    const products = RF(productsPath);    const videos = RF(videosPath);    await ctx.render("index", {      nav,      articles: articles.filter(v => v.review === 1).slice(0, 6),      products: products.filter(v => v.review === 1).slice(0, 6),      videos: videos.filter(v => v.review === 1).slice(0, 6),      copyright,      ...homeConfig    });    // 統計訪問量    const viewPath = `${config.publicPath}/db/views.json`;    const views = RF(viewPath);    WF(viewPath, {...views, home: views.home + 1});  });  // 渲染文章詳情頁  router.get(api.articleDetail, async (ctx) => {    const id = ctx.query.fid;    const articlePath = `${config.publicPath}/db/articles/${id}.json`;    const commentPath = `${config.publicPath}/db/comments/${id}.json`;    const article = RF(articlePath) || {};    const comments = RF(commentPath) || {};    comments.views = comments.views + 1;    await ctx.render("article_detail", {      nav,      viewTitle: article.title,      topImg: article.img,      authorInfo: { name: article.author, date: formatTime(article.ct, "-") },      cate: article.cate,      val:  article.type ? marked(article.val) : article.val,      commentInfoList: comments.comments || [],      flover: comments.flover,      views: comments.views || 0,      copyright,    });    WF(commentPath, comments);  });  // 其他頁面渲染服務邏輯...  });};export default pageRenderRouter;

3、模版消費

這里給大家參考一個我寫的 pug 頁面的例子:5KM28資訊網——每日最新資訊28at.com

5KM28資訊網——每日最新資訊28at.com

大家感興趣的可以參考一下具體的實現:5KM28資訊網——每日最新資訊28at.com

https://github.com/MrXujiang/lowcode-cms5KM28資訊網——每日最新資訊28at.com

服務端架構設計

5KM28資訊網——每日最新資訊28at.com

服務端本質上主要實現兩塊能力:5KM28資訊網——每日最新資訊28at.com

  • 內容端頁面渲染(SSR)
  • 后臺API和三方接口服務對接

服務端我參考了通用后端服務的 MVC 模式, 基于 koa2 搭建了一個簡易的服務端 MVC 模型, 如下是一個服務端的代碼目錄:5KM28資訊網——每日最新資訊28at.com

5KM28資訊網——每日最新資訊28at.com

主要實現的核心模塊有:5KM28資訊網——每日最新資訊28at.com

  • 靜態資源服務器
  • 微信分享, CDN上傳等第三方服務模塊
  • api路由
  • 中間件模塊
  • 資源上傳模塊
  • 用戶權限模塊
  • ssr服務模塊

如果搭建感興趣可以參考 github 中具體的實現代碼:https://github.com/MrXujiang/lowcode-cms5KM28資訊網——每日最新資訊28at.com

管理端系統架構設計

5KM28資訊網——每日最新資訊28at.com

5KM28資訊網——每日最新資訊28at.com

管理端采用的是 umi + react + antd4.0 實現的, 當然封裝了很多成熟的插件模塊, 比如說 富文本編輯器, md編輯器, 文件上傳模塊等, 大家可以在學習源碼的過程中受益非淺。5KM28資訊網——每日最新資訊28at.com

5KM28資訊網——每日最新資訊28at.com

上圖就是編輯模塊, 我封裝了實時預覽 md 和富文本的模塊, 大家可以拿來即用。5KM28資訊網——每日最新資訊28at.com

本地運行

1、目錄介紹

  • server 基于nodejs的服務端, 啟動后可直接訪問3000 端口, 也就是內容SSR端。
  • admin CMS的管理后臺, 集成了用戶管理, 內容審核, 內容發布, 數據統計等模塊。

開箱即用~~5KM28資訊網——每日最新資訊28at.com

2、本地啟動

server端:5KM28資訊網——每日最新資訊28at.com

# 進入server目錄cd server# 安裝依賴yarn# 服務端啟動yarn start

注: 如果是window系統, 可以執行 yarn start:win。5KM28資訊網——每日最新資訊28at.com

管理端:5KM28資訊網——每日最新資訊28at.com

# 進入admin目錄cd admin# 安裝依賴yarn# 啟動yarn start

初始化賬號: super_123, 密碼: zxzk_123。5KM28資訊網——每日最新資訊28at.com

內容端:5KM28資訊網——每日最新資訊28at.com

訪問3000端口即可。5KM28資訊網——每日最新資訊28at.com

部署發布

推薦使用 pm2 來管理 Node 服務進程, 只需要把 server 端上傳到服務器, 安裝對應依賴, 用 pm2 啟動即可:5KM28資訊網——每日最新資訊28at.com

pm2 start server/dist

有關 pm2 相關問題可以在我往期的文章中學習參考。5KM28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-67850-0.htmllowcode-cms開源社區源碼設計分享

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 獲取雙異步返回值時,如何保證主線程不阻塞?

下一篇: 微軟 Visual Studio 2022 獲推 17.9 Preview 3 更新:增強代碼搜索體驗

標簽:
  • 熱門焦點
  • K60至尊版剛預熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛如火如荼的宣傳了K60 Ultra的各種技術和硬件配置,作為競品的一加也坐不住了。一加中國區總裁李杰發布了兩條微博,表示在自家的一加Ace2上早就已經采用了和PixelWo
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 阿里大調整

    來源:產品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的“征求意見版”:1、取消P序列
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起“馮提莫”這個名字,很多網友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經的“斗魚一姐”,馮提莫在游戲直播的年代影響力不輸于現
  • AI藝術欣賞體驗會在上海梅賽德斯奔馳中心音樂俱樂部上演

    光影交錯的鏡像世界,虛實幻化的視覺奇觀,虛擬偶像與真人共同主持,這些場景都出現在2019世界人工智能大會的舞臺上。8月29日至31日,“AI藝術欣賞體驗會”在上海
  • 2021中國國際消費電子博覽會與青島國際軟件融合創新博覽會新聞發布會隆重舉行

    9月18日,2021中國國際消費電子博覽會與青島國際軟件融合創新博覽會新聞發布會在青島國際新聞中心隆重舉行。發布會上青島市政府領導聯袂出席,對本次雙展會情
Top 主站蜘蛛池模板: 滨州市| 库伦旗| 滁州市| 岳阳县| 习水县| 怀远县| 蛟河市| 秀山| 道孚县| 长治县| 舒兰市| 宁强县| 扎赉特旗| 阿拉尔市| 海原县| 宁海县| 高州市| 无极县| 凉城县| 新乡县| 彭泽县| 嘉善县| 绥中县| 泸溪县| 海门市| 奈曼旗| 额敏县| 北流市| 无为县| 泌阳县| 同江市| 东源县| 云林县| 泰顺县| 长沙县| 铜鼓县| 吉安县| 佛教| 富川| 城市| 昭觉县|