給簡(jiǎn)歷添加數(shù)據(jù)庫(kù)

預(yù)覽鏈接:預(yù)覽

LeanCloud 簡(jiǎn)介

官網(wǎng):LeanCloud

開(kāi)發(fā)版:免費(fèi)的針對(duì)開(kāi)發(fā)階段和個(gè)人項(xiàng)目解決方案,成本低、功能豐富蛀骇,可以滿足開(kāi)發(fā)的需求胸遇,適合產(chǎn)品開(kāi)發(fā)階段荧呐、個(gè)人項(xiàng)目、或在小群體中使用的應(yīng)用使用纸镊。

特點(diǎn):一定的流量以內(nèi)供開(kāi)發(fā)者免費(fèi)試用倍阐,但是必須使用他提供的API

使用說(shuō)明文檔快速入門(mén)

  • 在自己建立完App以后,點(diǎn)擊快速入門(mén) 逗威,選擇語(yǔ)言為 JavaScript

環(huán)境的安裝

NPM安裝的Bug解決

  • 注冊(cè)并進(jìn)入 leancloud 峰搪,創(chuàng)建應(yīng)用,按照說(shuō)明文檔操作
image.png
  • 使用 npm 安裝失敗凯旭,嘗試使用 yarn概耻,需要安裝 yarn

  • bash報(bào)錯(cuò)沒(méi)有curl 這個(gè)命令 bash: curl: command not found

  • 安裝 curl sudo apt install curl

  • 安裝 yarn 成功

  • 使用yarn依然無(wú)法安裝

  • 回到 npm 安裝使套,報(bào)錯(cuò)顯示沒(méi)有package.json

    npm WARN enoent ENOENT: no such file or directory, open '<root>/node_modules/supertest/package.json
    
  • 解決辦法為,在根目錄執(zhí)行命令 npm init

  • 發(fā)現(xiàn)此時(shí)目錄多了個(gè) package.json

  • 再次執(zhí)行 npm install leancloud-storage --save 鞠柄,顯示沒(méi)有權(quán)限侦高,加上 sudo 以后,執(zhí)行成功 春锋,但是沒(méi)有在我的當(dāng)前目錄下出現(xiàn)對(duì)應(yīng)的 node_modlues 文件矫膨,在根目錄發(fā)現(xiàn)有,但是我要在當(dāng)前目錄下使用啊期奔,怎么辦侧馅?

  • 在當(dāng)前目錄下執(zhí)行 npm init 出現(xiàn)了 package.json 文件,再執(zhí)行 sudo npm install leancloud-storage --save

  • 發(fā)現(xiàn)目錄有了這個(gè)文件


    image.png
  • 上面說(shuō)明配置成功呐萌,然后執(zhí)行第二條 npm install leancloud-realtime --save

  • 引入CDN <script src="http://cdn1.lncld.net/static/js/3.5.0/av-min.js"></script>

  • 現(xiàn)在雖然可以使用了馁痴,問(wèn)題是,這樣執(zhí)行了以后會(huì)不會(huì)留下什么后遺癥肺孤?下一次使用的時(shí)候罗晕??

測(cè)試

完成上面的操作以后赠堵,在控制臺(tái)輸入 AV 小渊,即可看到一個(gè) AV 對(duì)象如下:

{_config: {…}, _sharedConfig: {…}, _getAVPath: ?, _installationId: null, _getInstallationId: ?, …}

使用C-R-M原則

即:Copy,Run茫叭,Modify原則酬屉,使用別人的代碼運(yùn)行調(diào)試后在修改成自己需要的樣子進(jìn)行使用。

初始化

var APP_ID = 'HH1RDVnLiDw1RA0YCL66dcfw-gzGzoHsz';
var APP_KEY = 'eMqFOA16pkSGX7iCK408sNDE';

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

啟用指定的節(jié)點(diǎn)

var APP_ID = 'HH1RDVnLiDw1RA0YCL66dcfw-gzGzoHsz';  
//注意揍愁,這里每個(gè)人的ID不同呐萨,按照自己分配的即可
var APP_KEY = 'eMqFOA16pkSGX7iCK408sNDE';
AV.init({
  appId: APP_ID,
  appKey: APP_KEY,

  // 啟用美國(guó)節(jié)點(diǎn)
  region: 'us'
  
});

驗(yàn)證網(wǎng)絡(luò)

執(zhí)行命令行 :ping hh1rdvnl.api.lncld.net

復(fù)制測(cè)試代碼

var TestObject = AV.Object.extend('TestObject');
var testObject = new TestObject();
testObject.save({
  words: 'Hello World!'
}).then(function(object) {
  alert('LeanCloud Rocks!');
})
  • 此時(shí),刷新頁(yè)面以后會(huì)彈出提示框莽囤,同時(shí) LeanCloud 上面會(huì)有對(duì)應(yīng)對(duì)測(cè)試結(jié)果谬擦。

以上根據(jù)說(shuō)明文檔操作測(cè)試無(wú)誤以后即可上手使用。

建表朽缎,插入數(shù)據(jù)

事實(shí)上惨远,上面的測(cè)試代碼就是一個(gè)數(shù)據(jù)插入的操作

  • 建表,名字為 TestObject

    var TestObject = AV.Object.extend('TestObject');

  • 在表中新建一行數(shù)據(jù)

    var testObject = new TestObject();

  • 輸入一行數(shù)據(jù)內(nèi)容话肖,保存

  • 如果保存成功則彈出對(duì)話框北秽,內(nèi)容為“LeanCloud Rocks”

//創(chuàng)建表,名字為 TestObject
var TestObject = AV.Object.extend('TestObject');
//在表中創(chuàng)建一行數(shù)據(jù)
var testObject = new TestObject();

//創(chuàng)建一行數(shù)據(jù)為 "Hello,World!",保存
//如果保存成功狼牺,則彈出對(duì)話框內(nèi)容為 “LeanCloud Rocks”
testObject.save({
  words: 'Hello World!'
}).then(function(object) {
  alert('LeanCloud Rocks!');
})

小知識(shí)

  • 表單內(nèi)提交數(shù)據(jù)是監(jiān)聽(tīng) submit 還是 form 呢羡儿?

    答:監(jiān)聽(tīng) form

    因?yàn)椋?br> ?
    (1)當(dāng)用戶在輸入完成內(nèi)容以后直接按回車(chē)礼患,是應(yīng)該提交的是钥,同時(shí)掠归,用戶點(diǎn)擊“提交”

    按鈕也應(yīng)該提交內(nèi)容。

    (2)如果監(jiān)聽(tīng) submit的話悄泥,需要同時(shí)監(jiān)聽(tīng) submit 和 “Enter” 虏冻,顯得麻煩累贅;而直接監(jiān)聽(tīng)表單的話包括了上面的操作弹囚,代碼量少厨相。

    對(duì)比如下:

    //監(jiān)聽(tīng)form
    let myForm = document.querySelector('#postMessageForm)
    myForm.addEventListener('submit',function(e){
      e.preventDefault() //阻止提交成功以后刷新頁(yè)面
    })
    
    //監(jiān)聽(tīng) Submit
    let button = myForm.querySelector('input[type=submit]')
    button.addEventListener('click',function(){})
    // 監(jiān)聽(tīng)回車(chē)
    let input = myForm.querySelector('input[name=content]')
    input.addEventListener('keypress',function(e){
      if(e.keyCode === 13){}
    })
    //ps:如果有多個(gè)input,則要監(jiān)聽(tīng)多個(gè)回車(chē)事件鸥鹉。蛮穿。。
    
    

    ?

顯示數(shù)據(jù)

  • 頁(yè)面顯示層

在HTML頁(yè)面中寫(xiě)好對(duì)應(yīng)的結(jié)構(gòu)毁渗,舉例為

<body>
<ol>
//此處為使用js進(jìn)行動(dòng)態(tài)添加<li>標(biāo)簽践磅,在<li>標(biāo)簽內(nèi)添加對(duì)應(yīng)的返回?cái)?shù)據(jù)進(jìn)行顯示 
</ol>
  //以下操作添加數(shù)據(jù)
        <form class="postMessageForm" id="postMessageForm" style="width:700px;height:500px;margin: 0 auto">
            <label for="">姓名</label><input type="text" name="name">
            <label for="">內(nèi)容</label><input type="text" name="content" >
            <input type="submit" value="提交">
        </form>
</body>
  • 獲取歷史數(shù)據(jù)顯示在頁(yè)面中

進(jìn)入據(jù)存儲(chǔ)開(kāi)發(fā)指南 · JavaScript

找到 對(duì)象》批量操作》批量查詢

 var query = new AV.Query('Todo');
  query.find().then(function (todos) {
    todos.forEach(function(todo) {
      todo.set('status', 1);
    });
    return AV.Object.saveAll(todos);
  }).then(function(todos) {
    // 更新成功
  }, function (error) {
    // 異常處理
  });

將其修改成為自己需要的代碼即可

示例代碼如下:

function(){
            var query = new AV.Query('Todo');
            query.find().then(
                (message)=>{
                    let array = message.map((item)=> item.attributes)
                    array.forEach((item)=>{
                        let li = document.createElement('li')
                        li.innerText = `${item.name}:${item.content}`
                        let messageList = document.querySelector('#messageList')
                        this.messageList.append(li)
                    })
                },
                function(error){
                    alert('提交失敗灸异!')
                })

實(shí)現(xiàn)無(wú)刷新留言

因?yàn)槭褂?<form> 提交數(shù)據(jù)的時(shí)候會(huì)刷新頁(yè)面府适,不論是用戶自己刷新頁(yè)面看到提交以后的數(shù)據(jù),還是開(kāi)發(fā)者幫助用戶刷新頁(yè)面 肺樟,體驗(yàn)都極其不好檐春,因此,我們進(jìn)行改善 么伯。

  • 原來(lái)的思路:用戶提交數(shù)據(jù)表單以后數(shù)據(jù)在LeanCloud上疟暖,然后訪問(wèn) LeanCloud 獲取數(shù)據(jù)再顯示在頁(yè)面上。
  • 新思路:在用戶提交表單的時(shí)候蹦狂,把數(shù)據(jù)傳送到 LeanCloud 的同時(shí)誓篱,把數(shù)據(jù)添加在頁(yè)面中,代碼如下:
function(){
            let myForm = this.form
            let content = myForm.querySelector('input[name=content]').value 
            let name = myForm.querySelector('input[name=name]').value

            this.model.save(content,name).then(function(object) {
                let li = document.createElement('li')
                li.innerText = `${object.attributes.name}:${object.attributes.content}`
                let messageList = document.querySelector('#messageList')
                messageList.append(li)
                myForm.querySelector('input[name=content]').value = ''
                myForm.querySelector('input[name=name]').value = ''
            })
        }

Github-pages預(yù)覽失敗問(wèn)題解決

將項(xiàng)目上傳到github準(zhǔn)備使用githubpages 預(yù)覽凯楔,但是失敗窜骄,錯(cuò)誤信息如下:

![QQ圖片20180120211638.jpg](http://upload-images.jianshu.io/upload_images/1683063-910ed43da1467b60.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

然后查找問(wèn)題:這里的 a 有問(wèn)題....


QQ圖片20180120211638.jpg

解決:不是特別能看懂,既然是它影響了預(yù)覽摆屯,索性刪除了它

但是邻遏,刪除以后預(yù)覽依然失敗

最后,只好把目錄的 node_modules 和其他的Json文件刪了虐骑,發(fā)現(xiàn)可以預(yù)覽准验。

image.png

問(wèn)題原因:是因?yàn)?strong>沒(méi)有用到node_modules 和其他的Json文件,反而被它影響了廷没。糊饱。

實(shí)現(xiàn)效果預(yù)覽

預(yù)覽戳我

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市颠黎,隨后出現(xiàn)的幾起案子另锋,更是在濱河造成了極大的恐慌滞项,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夭坪,死亡現(xiàn)場(chǎng)離奇詭異文判,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)室梅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)戏仓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人亡鼠,你說(shuō)我怎么就攤上這事赏殃。” “怎么了间涵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵嗓奢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我浑厚,道長(zhǎng)股耽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任钳幅,我火速辦了婚禮物蝙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敢艰。我一直安慰自己诬乞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布钠导。 她就那樣靜靜地躺著震嫉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牡属。 梳的紋絲不亂的頭發(fā)上票堵,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音逮栅,去河邊找鬼悴势。 笑死,一個(gè)胖子當(dāng)著我的面吹牛措伐,可吹牛的內(nèi)容都是我干的特纤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侥加,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捧存!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤昔穴,失蹤者是張志新(化名)和其女友劉穎短蜕,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體傻咖,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年岖研,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卿操。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孙援,死狀恐怖害淤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拓售,我是刑警寧澤窥摄,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站础淤,受9級(jí)特大地震影響崭放,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸽凶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一币砂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玻侥,春花似錦决摧、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至姑食,卻和暖如春波岛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背音半。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工盆色, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祟剔。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓隔躲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親物延。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宣旱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355