Nodejs+mysql+Express: 一個簡單的博客

推薦網址:html

https://github.com/nswbmw/N-blog/blob/backup/book/%E7%AC%AC1%E7%AB%A0%20%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%8D%9A%E5%AE%A2.mdnode

https://www.cnblogs.com/Darren_code/p/node_express.htmlmysql

https://www.cnblogs.com/chyingp/p/express-multer-file-upload.html(文件上傳multer)git

項目github地址github

一、工程結構sql

 

 

二、路由控制 :Express封裝了http的不少方法數據庫

路由句柄(路由中間件):express

  next('route') npm

響應方法:json

  res.render:渲染視圖模板

  res.redirect:重定向請求
 

三、模板引擎(ejs)

  app.engine()方法

  以前先看看express應用的安裝命令:「express -e nodejs-product」,其中的 -e 和 -J 咱們一開始已經提到,表示ejs和jade模板。

  若是想把模板後綴改爲「.html」時就會用到app.engine方法,來從新設置模板文件的擴展名,好比想用ejs模板引擎來處理「.html」後綴的文件:app.engine('.html', require('ejs').__express);

  app.engine(ext, callback) 註冊模板引擎的 callback 用來處理ext擴展名的文件。

  PS:__express不用去care,其實就是ejs模塊的一個公共屬性,表示要渲染的文件擴展名。

 

四、 文件上傳multer 

const multer = require('multer');

var storage = multer.diskStorage({
  destination: function (req, file, cb){
      cb(null, './public/images')
  },
  filename: function (req, file, cb){
      cb(null, file.originalname)
  }
});
var upload = multer({ storage: storage })
  app.post('/upload', upload.array('field1', 5), function(req, res) {
    req.flash('success', '文件上傳成功!');
    res.redirect('/upload');
  });

 

五、Markdown的使用

  post頁面,寫博客有時引用上傳的圖片

  Markdown圖片使用:

      ![Alt text](/path/to/img.jpg "Optional title")   ===> 例如: ![](/images/1.jpge)

 六、文章的編輯與修改

  conn.query時,SQL語句是拼接的,會報錯:  Error: ER_BAD_FIELD_ERROR: Unknown column 'xxx' in 'where clause'

  解決辦法:

  (1)每一個string字段須要加""

    

   (2)SQL語句格式以下,不須要每一個字段都加""

  connection.query('UPDATE users SET foo = ?, bar = ?, baz = ? WHERE id = ?'['a''b''c', userId]function (errorresultsfields{
    if (errorthrow error;
    // ...
  });
 

七、留言功能實現

 conng更新Post的comments時,會報錯:Error: ER_DATA_TOO_LONG: Data too long for column 'comments' at row 1

 解決辦法: 

 (1)將comments字段類型varchart改成longtext      https://segmentfault.com/q/1010000009129135


八、ejs 渲染moment.js庫(將時間戳日期格式化)

  (1)項目裏安裝moment:npm install moment --save

  (2)app.js加入以下代碼:

  var moment = require('moment')

  在var app = express();後面加入 app.locals.moment = moment;

 

  

  (3)頁面渲染調用格式爲:<%= moment(new Date(parseInt("要解析的值"))).format('YYYY-MM-DD HH:MM:SS') %>

  

九、博客詳情頁面手動刷新,文章閱讀量一直加,使用session記錄

  

十、文章標題搜索--模糊查詢(POSITION)

   SELECT * FROM t_blog_post WHERE POSITION("' + keyWord + '" IN title)

十一、使用KindEditor

  (1)http://www.kindsoft.net/ 下載最新的 KindEditor 壓縮包,解壓後將文件夾重命名爲 kindEditor 並放到 public 文件夾下。

  (2)修改header.ejs

    

  (3)i定義圖片上傳接口

    https://blog.csdn.net/dexing07/article/details/53870580

    https://blog.csdn.net/charlene0824/article/details/51234394

十二、項目存在問題:
  (1)數據庫操做save、update方法應該封裝通用的
  (2)數據庫用戶數據清空,瀏覽器本地session存有user,還能夠繼續保存(已解決)

  (3)server端到數據庫的CRUD等等操做,,改進使用ORM框架 sequelize
  (4)評論時,評論的用戶信息應該不可編輯(已解決)

  (5)本身的評論不可操做

  (6)頁面佈局樣式亟待設計哦

1三、項目啓動
  (1)網上教程本地安裝mysql
  (2)setting.js配置mysql數據庫鏈接
  (3)建表sql爲t_blog_post.sql、t_blog_user.sql
  (4)npm install 安裝項目依賴
  (5)npm run start 啓動項目---localhost:3001,端口號可在package.json配置

 1四、幾個頁面

---------------------

--------------------------

-----------------------

--------------------------------

---------------------------------------------

相關文章
相關標籤/搜索