<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ~~~ import BaseController from "../../base.js"; /** * 新聞動態欄目 */ export default class extends BaseController { /** * 獲取新聞列表的分頁數據 * * @param {int} pageSize 分頁大小,默認12 * @param {int} page 請求頁碼,默認1 * @param {String} keywords 模糊查詢關鍵詞,支持title屬性檢索 * * @returns {Promise} 包含滿足條件的新聞列表的Promise對象 * @example * * const newsList = await request.get("/api/portal/news/getList", * {params: {key:'what you want to search', pageSize:10, page:1}}); * 返回列表每一個對象包含以下屬性: * [{ * id, * title, //新聞標題 * create_at, //創建時間 * view, //閱讀次數 * category_label,//分類名稱 * cover, //封面圖片或者視頻的地址 * abstract //摘要 * },] */ async getListAction() { let pageSize = this.get("pageSize") || 12; let page = this.get("page") || 1; let map = {}; //支持中文漢字和A-Za-z0-9 let keywords = think.service("utils").filterString(this.get("keywords")); // console.log(keywords); if (keywords) { map["title"] = ["LIKE", `%${keywords}%`]; } let field = "id,title,create_at,view,category_label,cover,abstract"; let rows = await this.model("portal_news") .field(field) .where(map) .page(page, pageSize) .countSelect(); return this.success(rows); } /** * 獲取新聞詳情 * * @param {int} id 新聞的id * * @returns {Promise} 包含滿足條件的新聞列表的Promise對象 * @example * * const newsInfo = await request.get("/api/portal/news/getDetail", {params: {id:1}}); * 返回對象包含以下屬性: * { * id, * title, //新聞標題 * author, //作者 * create_at, //創建時間 * view, //閱讀次數 * category_label,//分類名稱 * cover, //封面圖片或者視頻的地址 * abstract, //摘要 * description //新聞詳情,HTML格式 * } */ async getDetailAction() { let id = this.get("id"); await this.model("portal_news").where({ id: id }).increment("view", 1); let field = "id,title,author,create_at,view,category_label,cover,abstract,description"; let rows = await this.model("portal_news") .field(field) .where({ id: id }) .find(); //Markdown轉為HTML rows.description = think.service("marked").markdownToHtml(rows.description); return this.success(rows); } } ~~~ ## 代碼解讀 ### 1、明確輸出字段列表 API接口請求要明確列出輸出字段名稱,不輸出不必要的字段,并對輸出字段進行必要的轉義 ### 2、通過service封裝通用的后臺功能 將后臺常用的功能分類分裝成service的形式。 文件路徑:/src/service/utils.js ~~~ export default class extends think.Service { /** * 過濾掉字符串中不安全的符號,只保留中文字符和英文基本字母 * @param {string} str 需要處理的字符串 * @return {String} 處理完的字符串 */ filterString(str) { // 其中\u4e00-\u9fa5匹配漢字,a-zA-Z匹配字母,\d匹配數字,,.,。匹配逗號和句號,^表示非,+表示盡可能多的匹配。 /// [^\u4e00-\u9fa5a-zA-Z\d,\.,。]+/ if (think.isNullOrUndefined(str)) return ""; if (think.isEmpty(str)) return ""; return str.replace(/[^\u4e00-\u9fa5a-zA-Z_\d]/gi, ""); } } ~~~ ### 3、搜索功能一定要過濾字符串,避免SQL注入 ~~~ let keywords = think.service("utils").filterString(this.get("keywords")); if (keywords) { map["title"] = ["LIKE", `%${keywords}%`]; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看