搭建伺服器、資料庫(jQ網易雲)

搭建伺服器、資料庫(jQ網易雲)

一直都是用網易雲聽音樂,這次自己動手做一個移動端的jQ版網易雲,本篇主要講如何通過搭建本地伺服器,通過七牛和LeanCloud資料庫,在管理員界面可以上傳音樂。

一、對這個jQ版網易雲進行分析

1、用例圖 use cases(做什麼功能?)

2、線框圖(Stretch)

登錄頁面

註冊頁面

管理員頁面

3、架構圖

二、LeanCloud環境搭建

LeanCloud,會用做對數據的存儲與讀取(但不能存文件)。之前總結過對LeanCloud的使用:

余咖咖:如何使用LeanCloud加個資料庫??

zhuanlan.zhihu.com圖標

這裡就簡單的說一下步驟即可:

  • 註冊 LeanCloud 帳號
  • 創建一個應用,假設應用名字為 wangyiyun
  • 根據 JavaScript SDK 安裝指南 安裝 leancloud-storage
  • 在頁面中引入 av-min.js
  • 初始化 AV

var APP_ID = ...; var APP_KEY = ...; AV.init({ appId: APP_ID, appKey: APP_KEY });

  • 測試資料庫創建是否成功

//創建一個資料庫var TestObject = AV.Object.extend(TestObject);//用new新建 var testObject = new TestObject();//保存一條數據 testObject.save({ words: Hello World! }).then(function(object) {//保存成功,彈出Rocks alert(LeanCloud Rocks!); })

  • 去控制面板( 控制台 > 存儲 > 數據 > TestObject)查看數據,確認 TestObject 創建了一條新數據

三、七牛環境搭建

七牛可以存儲文件,獲取文件的信息。這裡說下步驟:

  • 創建一個本地nodejs server,下載地址:

yuyunzhi/nodejs-server?

github.com圖標

  • 註冊七牛帳號(上傳身份證):

七牛雲-國內領先的企業級雲服務商?

www.qiniu.com圖標

  • 新建一個儲存的空間「籃子」,這裡可以命名為:wangyiyun
  • 進入七牛SDK官網,用Node.js下載(SDK表示提供相關所有的API)
  • 輸入命令安裝

npm install qiniu-js

  • 給伺服器添加路由/uptoken
  • 在/uptoken添加如下代碼

var qiniu = require(qiniu)console.log(HTTP 路徑為
+ path)if(path===/uptoken){ response.statusCode = 200 response.setHeader(Content-Type, text/json;charset=utf-8) response.setHeader(Access-Control-Allow-Origin, *) response.removeHeader(Date)var config = fs.readFileSync(./qiniu-key.json)config = JSON.parse(config)let {accessKey, secretKey} = config;var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);var options = { scope: 籃子名, };var putPolicy = new qiniu.rs.PutPolicy(options);var uploadToken=putPolicy.uploadToken(mac);response.write(` { "uptoken": "${uploadToken}" } `)response.end() }else{ response.statusCode = 404 response.end() }

解釋一下下:當請求的路徑為/uptoken就會執行if花括弧的內容,返回狀態碼200,返迴響應頭,將七牛的accessKey, secretKey儲存到json里進行讀取,通過JSON.parse將其轉化為對象,並賦值給變數accessKey, secretKey,將獲取的內容放入新建的空間(籃子),並響應一個uptoken,響應結束。

  • 將 uploadToken 作為響應輸出
  • node server.js 8888,啟動 server,進行監聽。在瀏覽器輸入url:

http://localhost:8888/uptoken //就會響應一段uptoken

  • 參考七牛示例,使用使用 Qiniu.uploader 來上傳文件:

七牛雲 - JavaScript SDK?

jssdk.demo.qiniu.io

  • 引入moxie 1.x :版本號:1.5.6

https://github.com/moxiecode/moxie/releases?

github.com

  • 引入plupload 2.x :版本號:2.3.6

moxiecode/plupload?

github.com圖標

  • 引入qiniu-js 1.x

https://github.com/qiniu/js-sdk/tree/1.x?

github.com

<script src="../vendors/moxie.js"></script><script src="../node_modules/plupload/js/plupload.min.js"></script><script src="../node_modules/qiniu-js/dist/qiniu.min.js"></script>

注意:moxie 1.x無法通過npm安裝,所以直接下載;plupload 2.x ,qiniu-js 1.x知道版本號,可以打開package.json,直接加入以下代碼:

"dependencies": { "plupload": "^2.3.2", "qiniu-js": "^1.0.2" }

然後輸入命令安裝就可以了:

npm install

  • 初始化上傳按鈕(七牛示例有,參考並修改):

var uploader = Qiniu.uploader({ runtimes: html5, //上傳模式,依次退化 browse_button: xxx, //上傳選擇的點選按鈕,**必需** uptoken_url : http://localhost:8888/uptoken, domain: http://qiniu-plupload.qiniudn.com/, //bucket 域名,下載資源時用到,**必需** get_new_uptoken: false, //設置上傳文件的時候是否每次都重新獲取新的token max_file_size: 40mb, //最大文件體積限制 dragdrop: true, //開啟可拖曳上傳 drop_element: yyy, //拖曳上傳區域元素的ID,拖曳文件或文件夾後可觸發上傳 auto_start: true, //選擇文件後自動上傳,若關閉需要自己綁定事件觸發上傳 init: { FilesAdded: function(up, files) { plupload.each(files, function(file) { // 文件添加進隊列後,處理相關的事情 }); }, BeforeUpload: function(up, file) { // 每個文件上傳前,處理相關的事情 }, UploadProgress: function(up, file) { // 每個文件上傳時,處理相關的事情 uploadStatus.textContent = 上傳中 }, FileUploaded: function(up, file, info) { uploadStatus.textContent = 上傳完畢 // 每個文件上傳成功後,處理相關的事情 // 其中 info.response 是文件上傳成功後,服務端返回的json,形式如 // { // "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98", // "key": "gogopher.jpg" // } // 參考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html // var domain = up.getOption(domain); // var res = parseJSON(info.response); // var sourceLink = domain + res.key; 獲取上傳成功後的文件的Url }, Error: function(up, err, errTip) { //上傳出錯時,處理相關的事情 }, UploadComplete: function() { //隊列文件處理完畢後,處理相關的事情 }, } });

最後的效果如下:

四、這個過程的幾個要點

1、版本號不要裝錯了。。。qiniu-js 1.x的JS文件,全局變數是Qiniu,qiniu-js 2.x,全局變數是qiniu;

2、該報錯可忽視,是安全的。Refused to get unsafe header "date";

3、如果有401報錯,那麼檢查accessKey, secretKey是否準確;


推薦閱讀:

TAG:Web伺服器 | 資料庫 |