国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

vue+koa2即時(shí)聊天,實(shí)時(shí)推送比特幣價(jià)格,爬取電影網(wǎng)站

xietao3 / 456人閱讀

摘要:技術(shù)棧自動(dòng)化部署圖靈機(jī)器人打包,同步,服務(wù)器上傳一個(gè)命令全搞定功能清單登陸注冊(cè)獲取聊天記錄包含前端分頁優(yōu)化發(fā)送文字,表情,文件消息創(chuàng)建群組,添加群組,群組搜索修改個(gè)人信息,群組信息圖片裁剪壓縮上傳私聊圖靈機(jī)器人接入定時(shí)任務(wù)爬取電影和等數(shù)字

技術(shù)棧

vue+vuex+vue-router+socket.io+koa2+mongodb+pm2自動(dòng)化部署+圖靈機(jī)器人+[npm script打包,cdn同步,服務(wù)器上傳一個(gè)命令全搞定]

功能清單

登陸注冊(cè)

獲取聊天記錄(包含前端分頁優(yōu)化)

發(fā)送文字,表情,文件消息

創(chuàng)建群組,添加群組,群組搜索

修改個(gè)人信息,群組信息

圖片裁剪壓縮上傳

私聊

圖靈機(jī)器人接入

定時(shí)任務(wù)爬取電影和btc等數(shù)字貨幣的價(jià)格并使用socket.io實(shí)時(shí)推送給所有客戶端

前端一鍵打包同步到七牛cdn并上傳到服務(wù)器的實(shí)現(xiàn)

server端的pm2自動(dòng)部署

效果演示chrome下F12或者手機(jī)掃描下面的二維碼

后端的代碼暫時(shí)不開放出來,因?yàn)樯婕暗胶芏鄠€(gè)人的配置數(shù)據(jù),如果實(shí)在需要可以加微信 MSC199312 (需要付費(fèi)0.0!),畢竟這個(gè)小項(xiàng)目斷斷續(xù)續(xù)也做了幾個(gè)星期,也還花了些心思,而且涉及的知識(shí)點(diǎn)也都還是很廣很實(shí)用的,還望理解,其實(shí)主要原因還是窮[淚奔]

部分代碼

客戶端 main.js

import Vue from "vue"
import App from "./App"
import router from "./router"
import VueLazyload from "vue-lazyload"
import store from "@/store"
import io from "socket.io-client"
import "@/assets/js/remChange"
import "@/assets/js/request"
// import { wxConfig, updateShare } from "@/assets/js/wxenv"
import "@/assets/css/common.scss"
import "swiper/dist/css/swiper.min.css"
import config from "@/assets/js/config"
import filters from "@/assets/js/filters"
import { openToast } from "@/assets/js/tools"

Vue.config.productionTip = false

// 初始化全局過濾器
Object.keys(filters).forEach(item => {
  Vue.filter(item, filters[item])
})

// 懶加載
Vue.use(VueLazyload, {
  attempt: 1,
  // preLoad: 1.3,
  error: require("./assets/images/404.png"),
  loading: require("./assets/images/loading-img2.gif"),
  // the default is ["scroll", "wheel", "mousewheel", "resize", "animationend", "transitionend"]
  listenEvents: [ "scroll" ]
})

Vue.prototype.$config = config

router.beforeEach((to, from, next) => {
  // 如果未匹配到路由
  if (to.matched.length === 0) {
    // 如果上級(jí)也未匹配到路由則跳轉(zhuǎn)登錄頁面,如果上級(jí)能匹配到則轉(zhuǎn)上級(jí)路由
    from.name ? next({ name: from.name }) : next("/")
  } else {
    // 路由切換時(shí)改變頁面標(biāo)題
    document.querySelector("title").innerHTML = to.name
    // 統(tǒng)計(jì)代碼
    if (to.path) _czc.push(["_trackPageview", "/#" + to.fullPath], "")
    next()
  }
})

// 路由變化重新配置微信分享
router.afterEach(to => {
  // wxConfig(() => updateShare())
})

// socket.io 初始化
const socket = io.connect(config.socketBase)
Vue.prototype.$socket = socket
Vue.prototype.$socketEmiter = (name, data) => {
  store.commit("isLoading", true)
  return new Promise((resolve) => {
    socket.emit(name, data, res => {
      console.log(`${name}>>>`, res)
      store.commit("isLoading", false)
      if (res.status === 1) {
        resolve(res.data)
      } else {
        openToast({
          msg: res.message,
          duration: 1500
        })
      }
    })
  })
}

/* eslint-disable no-new */
const app = new Vue({
  el: "#app",
  router,
  store,
  template: "",
  components: { App }
})

server端 app.js

const Koa = require("koa")
const { resolve } = require("path")
const glob = require("glob")
const { connectDatabase, initAllSchema, initDefaultUser } = require("./database/init")
const config = require("./config")

const useMiddlewares = app => {
  glob.sync(resolve(__dirname, "./middlewares", "**/*.js")).forEach(item => {
    require(item)(app)
  })
}

(async () => {

  console.log("數(shù)據(jù)庫初始化...")
  await connectDatabase()
  initAllSchema()
  await initDefaultUser()

  const app = new Koa()

  console.log("掛載socket.io...")
  const server = require("http").Server(app.callback())
  const io = require("socket.io").listen(server)
  require("./socket")(io)

  // 暴露出io可在其他地方做推送功能
  module.exports.io = io

  console.log("掛載中間件...")
  useMiddlewares(app)

  console.log("初始化定時(shí)任務(wù)...")
  // 多了進(jìn)行一下封裝?
  require("./tools/crawlMovie")
  require("./tools/crawlCoin")

  server.listen(config.server.PORT, () => {
    console.log("正在監(jiān)聽" + config.server.PORT + "端口...")
  })

})()
貼上git地址歡迎給個(gè)star 部分運(yùn)行截圖









文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/94788.html

相關(guān)文章

  • koa2開發(fā)微信公眾號(hào): 不定期推送最新圈消息

    摘要:背景比特幣說好的分叉最后卻分叉不成,如今算力又不夠,于是比特現(xiàn)金想篡位沒一個(gè)星期就漲了快倍,錯(cuò)過這趟快車甚是后悔,于是打算寫一個(gè)可不定期推送最新消息的微信公眾號(hào)。既然是利用微信這個(gè)平臺(tái)載體,當(dāng)然要熟悉微信的,遂封裝了一下。 背景:比特幣說好的segwit2x分叉最后卻分叉不成,如今算力又不夠,于是比特現(xiàn)金想篡位? 沒一個(gè)星期就漲了快10倍,錯(cuò)過這趟快車甚是后悔,于是打算寫一個(gè)可不定期推...

    xi4oh4o 評(píng)論0 收藏0
  • TensorFlow-Bitcoin-Robot:一個(gè)基于 TensorFlow LSTM 的 Bi

    摘要:對(duì)于以比特幣為首的數(shù)字貨幣近期的表現(xiàn),只能用瘋狂來形容。比特幣的成交記錄就是事件序列上的加個(gè)數(shù)據(jù),可以基于過去的成交記錄序列來對(duì)未來的價(jià)格作出預(yù)測(cè),和的模型比較合適。最后采用了,用爬取,它包含比特幣的個(gè)交易記錄。 簡(jiǎn)介 TensorFlow-Bitcoin-Robot:一個(gè)基于 TensorFlow LSTM 模型的 Bitcoin 價(jià)格預(yù)測(cè)機(jī)器人。 文章包括一下幾個(gè)部分:1.為什么要...

    Mertens 評(píng)論0 收藏0
  • 一文徹底讀懂 Tether,究竟是神、是妖、還是魔?

    摘要:是全球最大的加密貨幣交易所之一,一些市場(chǎng)觀察人士稱,在交易的代幣有助于支撐比特幣的價(jià)格。報(bào)告稱,在年月日的審計(jì)時(shí)點(diǎn)上,一家銀行以名義開具的賬戶下?lián)碛忻涝目铐?xiàng)。截至年月底,波多黎各這類金融機(jī)構(gòu)的現(xiàn)金與總資產(chǎn)的比率迅速攀升至以上。 在追求各種類型「共識(shí)」的數(shù)字貨幣世界里,對(duì) Tether 的看法顯然很難達(dá)成共識(shí),極具爭(zhēng)議,也引人矚目。 在尋找穩(wěn)定代幣的投資者眼中,Tether 如神,是解...

    zhaot 評(píng)論0 收藏0
  • PHP和樹莓派開發(fā)一個(gè)比特/以太坊交易機(jī)器人

    摘要:注目前我已經(jīng)擴(kuò)展了機(jī)器人以便能夠交易以太坊我希望它能夠在不必太多關(guān)注的情況下做事,而我想到的第一件事就是為什么不創(chuàng)建一個(gè)可以自動(dòng)進(jìn)行比特幣和以太坊的簡(jiǎn)單交易機(jī)器人。在下一個(gè)泡沫破裂的時(shí)候自動(dòng)購(gòu)買比特幣。選擇比特幣以太坊和歐元美元錢包。 我最近得到了Raspberry Pi Zero Wifi,我告訴你這個(gè)東西是改變游戲規(guī)則的。我之前使用過RasPis,但由于該設(shè)備的占地面積小得多,耗電...

    ShowerSun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<