C蠻的全棧之路-序章 技術棧選擇與全棧工程師
C蠻的全棧之路-node篇(一) 環境佈置
C蠻的全棧之路-node篇(二) 實戰一:自動發博客html
---------------- 我是分割線 --------------node
光看不寫,收穫一定不高。
我們從一個實際功能開始把node用起來。mysql
這裏有個連接,說天天6點發出閱讀量最高。那麼咱們會但願先把內容準備好,而後6點的時候自動發出。
那麼這個需求要怎麼實現。咱們一步一步作起來。redis
---------------- 分析 --------------sql
考慮作法,好比有這些思路:
一、博客園自己提供的定時發博客的辦法
二、博客園提供的API
三、模擬登錄操做博客園後臺
翻一下後臺,博客自身沒有提供這個功能,但在「設置」底部有一個「MetaWeblog訪問地址: http://rpc.cnblogs.com/metaweblog/bolee」。
說明支持MetaWeblog接口API。
定時功能滿地都是,成熟的很,因此須要作的主要就是要實現一個調用MetaWeblog發佈博客的功能。express
---------------- 準備工做 --------------npm
上GitHub,搜MetaWeblog,找JavaScript的資源,就找到了「node-modules/metaweblog」。
簡單看一眼,裏頭實現了一個metaweblog的client,正是咱們須要的。
那麼創建一個工程目錄,用npm install metaweblog拿下來。
它依賴xml2json,這玩意當然性能好,不過依賴node-gpy,麻煩。從GitHub找個node-xml2json做爲替換,一樣npm取下來換上。
這樣準備工做就齊全了。json
---------------- 開工 --------------框架
看一下metaweblog的接口。主要用這兩個API。
Post metaWeblog.getPost(postid, username, password);
bool metaWeblog.editPost(postid, username, password, post, publish);
可見從getPost拿到隨筆,用editPost傳publish=true就能夠發佈了。
Post的結構裏必填的部分以下:
dateTime dateCreated
string description
string title
OK!開始編碼:
var MetaWeblog = require('metaweblog').MetaWeblog; var rpcurl = 'http://rpc.cnblogs.com/metaweblog/你的暱稱'; var username = '你的暱稱'; var password = '你的密碼'; var postid = '你要發佈的隨筆的連接末尾的數字'; var publish = true; var blog = new MetaWeblog(rpcurl); // GetPostByPostID blog.getPost(postid, username, password, function(err, post) { });
跑起來看一眼返回的post是這樣的。
能夠看到,內容是xmlrpc轉成的JSON,裏頭有一大堆過路節點,實際有用的內容不過是一些name-value對,那麼咱們來一段代碼把過路節點幹掉,剩下純粹的name-value對。
function jsonGetNameValue(obj) { if (typeof(obj) != 'object') { return {}; } var name = obj['name']; var value = obj['value']; var ret = {}; if(name != undefined && value != undefined) { ret[name] = value; } for(var key in obj) { extend(ret, jsonGetNameValue(obj[key])); } return ret; }
如今再看看jsonGetNameValue(post)的內容:
這就舒服多了,咱們想要的Post結構的內容都在裏頭。這樣就能夠調用editPost了。
// GetPostByPostID blog.getPost(postid, username, password, function(err, post) { var ret = jsonGetNameValue(post); var editedPost = {'dateCreated': parseCNBlogIsoDatetime(ret['dateCreated']['datetime']['iso8601']), 'description': ret['description']['string'].toString(), 'title': ret['title']['string']}; // publish blog.editPost(postid, username, password, editedPost, publish, function(err, editResult) { console.log(JSON.stringify(editResult)); }); }); // 返回{"params":{"param":{"value":{"boolean":1}}}}
跑起來看一眼,輸出了true。
確認一下,果真已經發布出去了。
---------------- ESLint --------------
用npm裝一下ESLint,VSCode裏裝個ESLint擴展,配好後報出一些錯誤,都解決掉,把格式順一順。
這樣第一個版本就出爐了。
還有什麼是能夠作的呢?能夠考慮來個ES6版本,加上錯誤處理等。
---------------- 功能點 --------------
npm、GitHub、ESLint等,這個例子沒有express、koa什麼的框架,也沒有什麼redis、mysql、MongoDB等周邊的東西。
做爲第一個例子算比較單純了。