<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[danger] **棄用提醒:** > *由于看云對于免費用戶的限制愈發嚴苛,本文檔已經遷移至語雀。本文檔將不做維護。* > **語雀地址**:[https://www.yuque.com/a632079/nodebb](https://www.yuque.com/a632079/nodebb) ***** # 常用方法 & 變量 [TOC] ## 導言 ![](https://box.kancloud.cn/a755d72eea414bd1e25d6fb8f1d01dc3_1177x906.png) NodeBB 自身攜帶了一系列方法, 我們將其稱為 **NodeBB 系統方法庫**。 NodeBB 系統方法庫包含數據庫操作, 權限管理, 用戶操作, 路由管理, socket.io操作等快捷的方法。 出于快速開發的考慮, NodeBB 團隊允許開發者們調用系統方法庫書寫插件。作為開發的第一步, 初步了解 NodeBB 系統函數庫的使用方法十分必要。 方法庫位置: https://github.com/NodeBB/NodeBB/tree/master/src >[info] 在 v1.13.0 中, NodeBB 已經完成方法庫的 Promise 支持,所以我們不必對其異步處理了。 ## 常用方法 在本節中, 我們會初步介紹 NodeBB 方法庫的基本使用方法, 以及常用的方法。 ### 申明函數庫 ``` // 系統方法庫 const user = require.main.require('./src/user') const db = require.main.require('./src/database') const meta = require.main.require('./src/meta') const utils = require.main.require('./src/public/src/utils') // 常用模塊 const async = require.main.require('async') const nconf = require.main.require('nconf') const winston = require.main.require('winston') const path = require.main.require('path') ``` >[info] 以上是相對常用的 NodeBB 方法庫 以及 NodeBB 依賴模塊 的申明 一次申明所有常用的方法庫是一個十分有助于提高開發效率的手段, 可以避免在開發過程中多次回到文件頭添加申明。 ### 用戶表操作 本節將介紹 NodeBB 方法庫中 `user` 的常見使用方法。 >[danger] 注意: 如果需要讀寫自定義的用戶表字段, 需要添加白名單。 #### 添加白名單 在 `plugin.json` 中添加 hook : ```json { "hooks": [ { "hook": "filter:user.whitelistFields", "method": "addUserWhitelistFields" } ] } ``` 在 `core.js` 中添加: ```javascript class Core { // 在類中添加 async addUserWhitelistFields: (data) => { data.whitelist.push('field_name') // 添加白名單字段名 return data } } ``` #### 保存數據至用戶表 * 方法: `user.setUserField`, `user.setUserFields` * 參數: * 前者: `uid`, `field`, `data` * 后者: `uid`, `data` (對象) ##### 使用例子 ```javascript async () => { // 如果只是保存一些非重要信息(無需確保寫安全), 可以移除下方的 `await` 來提高速度 await user.setUserField(1, 'access_token', '**********') await user.setUserFields(1, { access_token: '******', access_secret: '******' }) } ``` #### 獲取用戶表數據 * 方法: `user.getUsersFields` , `user.getUserFields` , `user.getUserField` * 參數: `uids`, `fields` > **注:** 后兩者其實是前者的語法糖。 該方法能夠便捷得獲取某用戶的特有信息。 ##### 使用例子 ```javascript async () => { const username = await user.getUserField(1, 'username') // 返回 uid 為 1 的用戶名, 返回類型就是數據類型 const data = await user.getUserFields(1, ['username', 'email']) // 返回 uid 為 1 的用戶的用戶名和郵箱, 返回類型是數組 const muti = await user.getUsersFields([1, 2], ['username', 'email']) // 返回 uid 1, 2 的用戶名和郵箱, 返回類型是數組 (多元數組) } ``` #### 獲取 UID NodeBB 中可以通過 Username, Userslug, Email 來獲取 UID. 方法: `user.getUidByEmail ` `user.getUidByUsersulg` `user.getUidByUsername` 參數: `input` > **注:** NodeBB 還提供類似獲取用戶表數據中的獲取多數的方法,也提供了獲取 username , userslug, email 的方法, 有需要可以查看 NodeBB 系統方法庫。 ##### 使用例子 ```javascript async () => { const uid = await user.getUidByEmail('admin@admin.com') // 返回 uid 或者 null const also_uid = await user.getUidByUsername('a632079') // 返回 uid 或者 null const uid_too = await user.getUidByUserslug('a632079') // 返回 uid 或者 null } ```` #### 創建用戶 方法: `user.create` 參數: `data`(對象) > **注:** data 中 email, username 必須存在. password 可以缺省 ##### 使用例子 ```js async () => { await user.create({ username: 'username', email: 'user@mail.com', password: 'input_Password' // 密碼可以缺省, 通常只在通過 SSO 注冊的時候缺省 }) } ``` ### 數據庫操作 本節將會介紹 NodeBB 方法庫中 `db` 的常用方法。 #### 保存數據 方法: `db.setObjectField` 參數: `key`, `field`, `data` ##### 使用例子 ```js async () => { // 無需確保寫安全, 可以移除 await 提高速度 await db.setObjectField('wxid:uid', 'wechat_openid', 'uid') // SSO WeChat 中的例子, 通過 wechat openid 獲得 用戶 uid 以便實現登錄 } ``` #### 判斷數據是否存在 方法: `db.isObjectField` 參數: `key` `field` ##### 使用例子 ```js async () => { const juage = await db.isObjectField('qqid:uid', 'qq_openid') // 返回布爾值. true 或者 false } ``` #### 獲取數據 方法: `db.getObjectField` 參數: `key`, `field` ##### 使用例子 ```js async () => { const juage = await db.getObjectField('qqid:uid', 'qq_openid') // 返回 null 或者 數據 } ``` ### 元信息操作 本節將講述 NodeBB 系統庫 `meta` 中最常用的方法 #### 獲取設置 * 方法: `meta.setting.get`, `meta.setting.getOne` * 參數: * 前者: `hash` * 后者: `hash`, `field` ##### 使用例子 ```js async () => { const settings = await meta.setting.get('aliverify') // 摘自 AliVerify,返回 null 或者設置 const appkey = await meta.setting.getOne('aliverify', 'appkey') // 摘自 AliVerify,返回 null 或者設置 } ``` #### 保存設置 * 方法: `meta.setting.set`,`meta.setting.setOne` * 參數: * 前者: `hash`, `values` * 后者: `hash`, `field`, `value` >[info] 我們并不推薦使用此方法, 設置更應該交給插件后臺設置控制。 ##### 使用例子 ```js async () => { await meta.setting.set('qq_config', { appId: '******', appToken: '*******' }) await meta.setting.setOne('qq_config', 'appId', '******') } ``` ### 工具類 本節中, 我們將介紹 NodeBB 公共庫中 `/public/src/utils` 的用法 #### 生產 UUID 方法: `utils.generateUUID` ##### 使用例子 ```js async () => { const uuid = utils.generateUUID() } ``` #### 鹽化 可以將 username 轉換成 userslug 方法: `utils.slugify` 參數: `username` ##### 使用例子 ``` async () => { const userslug = utils.slugify('MyUserName') } ``` #### 有效性檢查 方法: `utils.isEmailValid`, `utils.isUserNameValid`, `utils.isPasswordValid`, `utils.isNumber` 參數: `input` ##### 使用例子 ``` async () => { utils.isEmailValid('mail.com') // 返回 false utils.isUserNameValid('a632079') // 返回 true utils.isPasswordValid('') // 返回 false utils.isNumber('123') // 返回 false } ``` ## 常用變量 ### Session 中的 uid 如果有 express 的 `req` 參數傳入, 我們就可以很方便得獲取 uid #### 使用例子 ```js async (req) => { if (req.user && req.user.uid && req.user.uid > 0) { const uid = req.user.uid } } ``` >[info] 編寫: a632079 維護: PA Team 審核: PA Team 最后更新: 2019.12.09
                  <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>

                              哎呀哎呀视频在线观看