美文网首页vue.jsVue.js前端实际项目
Vue.js + Node.js打造个人博客(新手向)

Vue.js + Node.js打造个人博客(新手向)

作者: cool_cl | 来源:发表于2016-12-28 14:36 被阅读7058次

    原文地址:lewis1990@amoy

    前言

    做为一名立志全栈的页面仔,一直想着要独立开发一个项目,从前台到后台到数据库,从设计到开发到上线。一般说到这样的练手项目,通常得到的意见都是写个博客系统呗!刚好对之前用hexo部署在GitHub Page上的博客的傻瓜式及龟速实在忍无可忍,于是乎,就写个博客系统呗!先放上链接。

    方案

    • UI风格:主要参考Randy's Blog的风格,并加入自己的一点想法(主要是为了偷懒)。
    • 前端页面:基于Vue2.0的响应式SPA,啊?你问我为什么?就如《关于》中的自我介绍:我自认为擅长Vue的SPA开发。
    • 后台:前端工程师通向全栈的捷径:Node.js。负责写接口及渲染静态页面。
    • 数据库:原计划是用MongoDB,但为了赶进度,索性数据库都不用了,第一版就先这样吧。
    • 文章:参考hexo用markdown语法写好文章再转成html的做法。也是在本地编辑好md格式的文章,上传到服务器,Node.js直接读取md文件并转化为html,返回给前台,这也是为什么暂时不需要数据库的原因。
    • 部署:AWS,一年时间免费使用哦!你问我一年后怎么办?God knows!也许一年时间已经让我经历了从入门到放弃。

    扬帆!起航!

    1. 页面布局:自己看Cloud's Blog,简单介绍下。第一屏为一张壁纸宽高均为100%铺满整个可视区域,内容有博客名称、小标题及三个关于博主的链接;点击向下箭头滚动进入第二屏正题,分为四个Tab模块:【首页】、【文章】、【作品】、【关于】。默认为【首页】,即最新一篇文章详情,【文章】为文章列表,点击可阅读文章内容,【作品】为作品列表,这部分还没完成,【关于】为关于博主的一些介绍。PS:首屏的壁纸在Google图片里找了一上午才找到这张还算满意的,考虑到手机端壁纸是居中铺满整个可视区域,要找到一张PC端手机端效果都还行且逼格不能太低的图片真的不容易,BTW,博主还是选择困难症患者。

    2. 前端开发:从Vue脚手架开始

    # 全局安装 vue-cli
    $ npm install --global vue-cli
    # 创建一个基于 webpack 模板的新项目
    $ vue init webpack blog
    # 安装依赖,走你
    $ cd blog
    $ npm install
    $ npm run dev
    

    然后安装Vue-router用于SPA路由及vue-resource或axios用于Ajax。

    $ npm install --save vue-router
    $ npm install --save axios
    # vue官方推荐的ajax库不再是vue-resource,而是axios
    

    然后就可以开始码静态页面了,根据第一步页面布局的思路写出静态页面应该不是什么难事,其中需要调用第三步中node.js提供的接口,这里就不再多说了。完成静态页面后编译

    $ npm run build
    
    1. 后端开发:创建服务端目录结构并安装express框架及marked用于将md文件转为html
    $ mkdir blog-server && cd blog-server
    $ mkdir public
    $ npm install --save express
    $ npm install --save marked
    

    写接口,目前主要有三个接口。

    1. 获取文章列表接口。fs.readdir方法读取md文件所在文件夹,返回所有md文件的文件名即文章标题、创建时间、文章路径,并按创建时间排序渲染在【文章】页。
    2. 文章内容接口。根据第一个接口返回的文件名及路径,用fs.readFile方法读取md文件的内容并用marked转为html并返回给客户端,渲染在文章内容页。
    3. 首页内容接口。类似接口2,读取最新一篇文章并返回。记得处理跨域问题。
    app.all('*', function(req, res, next) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "X-Requested-With");
        res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
        res.header("X-Powered-By",' 3.2.1')
        res.header("Content-Type", "application/json;charset=utf-8");
        next();
    });
    

    渲染静态页面,将第二部编译出来的静态文件及md格式的文章文件拷入public文件夹,并用express内置的中间件指定public文件夹为静态资源文件的根目录并缓存。因为是单页应用,所以记得要处理好404错误。

    # server.js
    var express = require('express');
    var app = express();
    app.use(express.static('public',{maxAge:60*60*24*30}));
    app.get('/',function(req,res){
      res.sendFile('/index.html',{root: __dirname + '/public/'});
    });
    app.listen(80);
    
    1. 部署
    • 申请AWS(亚马逊云主机),一年免费试用,需填信用卡信息。实例一台EC2,win或Linux系统,推荐Linux。开放相应端口并安装node.js。
    • 安装PM2,并运行第三步的server.js服务,并让PM2随系统启动。
    $ npm install -g PM2
    $ pm2 start server.js
    $ pm2 startup
    

    此时我们的博客系统已经运行在EC2上了。

    • 购买域名。我是在腾讯云上购买的xyz域名,第一年8块钱。解析到该EC2的公网IP上,即可通过域名访问。比如通过 http://www.lee-cloud.xyz 可访问我的博客。

    未来计划

    1. 完成【作品】Tab页,现在虽然勉强上线了,但缺了这一块逼死强迫症啊。
    2. 后台管理,功能模块暂定为
    • 文章上传
    • 作品上传
    • 【关于我】内容编辑
    • 首页定制
    1. 启用MongoDB数据库
    2. 界面美化、性能优化
    3. 评论功能
    4. seo

    写在最后

    仅此记录Cloud's Blog初版上线过程


    2017.08.29
    好久没更新,这个博客是去年年底刚接触vue.js时拿来练手的,很粗糙,最近心血来潮准备更新2.0,有同学在问的源码在这里github地址,有兴趣的话帮忙点个star,谢谢!

    相关文章

      网友评论

      • 忠于人品陷于才华败于社会:还没用过vue搞博客呢
      • e709a7adfcb4:到了Pm2 那部不行了$ pm2 start server.js
        bash: pm2: command not found
        cool_cl:@唷唷_2266 全局安装pm2
      • 叶远川:作者,最近在自学VUE的东西,DOWN下来源码后,可以通过什么方式私聊你吗?我想学一下如何做一个个人博客。。
      • 尹大叔啊:www.yinkaiyan.cn
      • 尹大叔啊:PC端模版,www.yinkaiyan.cn。要的私
      • Eyre悱:学习一下:smile:
      • e0a98c2c1a8e:首页图很漂亮,盗图可以吗:stuck_out_tongue_winking_eye:
        cool_cl:哈哈,是指两边有代码的背景图吗?准了
      • zet_zhou:博客后台文章上传的代码没找到:cry:
      • 二号潜水艇:另外问个问题:有没有方法像`npm run dev`(前端热加载)一样愉快的实现前后端同时热加载呢?这样前后端可以在一个项目里面完美融合,感觉这样分开开发好郁闷
        cool_cl:去年刚接触vue.js和webpack,都不太熟,最近准备更新2.0,可以关注一下共同学习。喜欢的话求个star:smirk:
      • 二号潜水艇:我的情况:去年买的`xyz`域名到期没有再续,一共就写了3篇,太浪费了,:)
        cool_cl:去年买的域名和aws,只写了这篇文章:joy: ,最近打算继续更新博客,喜欢的话求个star
      • 83d031075afc:求git源码交流学习
        83d031075afc:@leeCloud 已star,我也做了个vue开箱即用项目,欢迎https://github.com/alexx617/generator-alexvue,交流.
        cool_cl:https://github.com/Lee-Cloud/CloudBlog,觉得有点帮助的话求个star
      • dino小恐龙:望博主能分享个源码,学习一下!
        cool_cl:https://github.com/Lee-Cloud/CloudBlog,觉得有点帮助的话求个star
      • 49209d7cf3f5:想问一下博主,源码连接能发一下吗?
        cool_cl:https://github.com/Lee-Cloud/CloudBlog,觉得有点帮助的话求个star
      • ihoey:大佬准备什么时候更新呢!
        cool_cl:我只是个小菜鸟:joy: 近期打算更新2.0
      • 竹风欣海笑:赞一个,加油
      • AlitaAI:楼主可以看下源码学习下嘛
        cool_cl:https://github.com/Lee-Cloud/CloudBlog,觉得有点帮助的话求个star,其实博客首页就有链接呀。都没看到吗:joy:
      • Lutils:亚马逊云免费的用起来方便吗
        cool_cl:@Lutils 还不错啊,该有的都有,文档也比较全,对我个人来说完全够用,而且还有一年那么长的免费试用时间
      • 漫漫前端:最近刚好也有这个打算,还请多指教
      • 张宁祥:学习了
      • 5e72ebba6800:没看懂你的这个博客 可以解释一下吗
        cool_cl:@在Finding 哪里没看懂呢?目前功能还蛮简单的
      • love2013:最近开始学vue
      • b860b386b4d4:进军vue
      • 丿inane丶:赞一个
      • e2ec9ded88c2:很不错,特来学习下。wordpress实在是臃肿
        cool_cl:@旧梦mrju 谢谢,共同学习,欢迎提建议、指正。:smile:

      本文标题:Vue.js + Node.js打造个人博客(新手向)

      本文链接:https://www.haomeiwen.com/subject/yvuyvttx.html