<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之旅 廣告
                [TOC] # 導入指定目錄的所有js文件 ``` const glob = require('glob') const {resolve} = require('path') exports.initSchemas = () => { glob.sync(resolve(__dirname, './schema', '**/*.js')).forEach(require) } ``` # 匹配2個標簽中的內容 ~~~ // 包含2個標簽在內 $.trim(p.match(/[^<>]+/g) ~~~ # 調用API ~~~ const rp = require('request-promise-native') async function fetchMovie(item) { const url = `http://api.douban.com/v2/movie/subject/${item.doubanId}` const res = await rp(url) let body try { body = JSON.parse(res) } catch(err) { console.log(err) } return body } ~~~ # 進程通信 子進程代碼 ~~~ ; (async () => { let result = await getData() process.send({result}) // 將這個結果發送出去 process.exit(0) // 退出進程 })() ~~~ 父進程 ~~~ const cp = require('child_process') const {resolve} = require('path') ;(async () => { const script = resolve(__dirname, 'child_process.js') const child = cp.fork(script, []) // 返回子進程對象 let invoked = false child.on('error', err => { if (invoked) return invoked = true console.log(err) }) child.on('exit', code => { if (invoked) return invoked = true let err = code === 0 ? null : new Error('exit code' + code) console.log(err) }) // 在子進程使用 process.send() 函數來傳遞消息時觸發 child.on('message', data => { let result = data.result // 處理 result 數據 }) })() ~~~ # 七牛上傳 ~~~ // config中的配置 // bucket:存儲空間名稱 // AK:AccessKey // SK:SecretKey const qiniu = require('qiniu') const nanoid = require('nanoid') const config = require('../config') const bucket = config.qiniu.bucket // 構建BucketManager對象 const mac = new qiniu.auth.digest.Mac(config.qiniu.AK, config.qiniu.SK) const cfg = new qiniu.conf.Config() const client = new qiniu.rs.BucketManager(mac, cfg) // 抓取網絡資源到空間 //拿到指定的url,將內容上傳到七牛上 const uploadToQiniu = async (url, key) => { return new Promise((resolve, reject) => { client.fetch(url, bucket, key, (err, ret, info) => { if (err) { reject(err) } else { if (info.statusCode === 200) { resolve({ key }) } else { reject(info) } } }) }) } let sources = [] sources.map(async item => { try { let data = await uploadToQiniu(item.uri, item.name) } catch(err) { console.log(err) } }) ~~~ # 裝飾器路由 也可參考 https://juejin.im/post/5c8749225188257f3d5d0bfc # 路由 步驟 1. 在 index.js 調用中間件 /server/middleware/router.js 2. 執行 router.js 的 router 方法 1. 將 /server/routes/ 賦值給 apiPath 2. 實例化 /server/lib/decorator 的 Route,將傳入的參數app、apiPath賦值給類屬性,實例化koa-router 3. 調用 Route 的 init 方法 1. 導入 apiPath(即routes) 目錄下的所有 js 文件 1. 執行controller修飾符,在Controller的prototype屬性創建唯一屬性symbolPrefix,值為將傳入的路徑參數 2. 執行get post修飾符,修飾Controller的方法,執行router函數 3. 在routerMap添加鍵值對,如鍵為{target: movieController,method:'get',path: '/'},值為getMovies函數 2. 遍歷 routerMap,獲取conf, controller屬性 1. 將controllers轉化為數組 2. 若路徑前綴存在,與配置中的path拼接為routerPath 3. 調用 koa實例的 router\[method\](routerPath, ...controllers) ## index.js 導入 middleware文件夾內MIDDLEWARES數組的文件 ~~~ const R = require('ramda') const MIDDLEWARES = ['router'] const useMiddlewares = (app) => { R.map( R.compose( R.forEachObjIndexed( initWith => initWith(app) ), require, name => resolve(__dirname, `./middleware/${name}`) ) )(MIDDLEWARES) } ;(async() => { await connect() const app = new Koa() await useMiddlewares(app) app.listen(8888) })() ~~~ ## middleware/router.js 以app和routes目錄路徑為參數,初始化decorator ~~~ const {resolve} = require('path') const {Route} = require('../lib/decorator') export const router = app => { const apiPath = resolve(__dirname, '../routes') const router = new Route(app, apiPath) router.init() } ~~~ ## routes\\movie.js ~~~ const { controller, get } = require('../lib/decorator') const { getAllMovies, getMovieDetail, getRelativeMovies } = require('../service/movie') @controller('/api/v0/movies') export class movieController { @get('/') async getMovies (ctx, next) { const { type, year } = ctx.query const movies = await getAllMovies(type, year) ctx.body = { success: true, data: movies } } @get('/:id') async getMovieDetail (ctx, next) { const id = ctx.params.id const movie = await getMovieDetail(id) const relativeMovies = await getRelativeMovies(movie) ctx.body = { data: { movie, relativeMovies }, success: true } } } ~~~
                  <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>

                              哎呀哎呀视频在线观看