用Express搭建 blog (一)

 

Info

公司立刻要舉行 hack day 了,此次決定和小夥伴用 Express 做爲框架來搭建咱們的應用,因此昨天搭出來UI後,今天開始系統的學習下 Express。javascript

Start

首先是express的全局設置。css

1
sudo npm install -g express

接着咱們試着用express搭建一個簡單的blog程序
在work path 運行命令html

1
express -e ejs blog

能夠看到express已經幫你建立了一系列的模板程序。接着進入blog目錄安裝ejs等相關依賴。前端

1
cd blog && npm install

運行java

1
node app

並訪問http://localhost:3000/ ,簡單的hello world 程序已經生成。node

下面來看下程序的整個結構,運行commandmongodb

1
tree -I  node*

express的模板程序結構看起來和rails的結構很相像。數據庫

1
2
3
4
5
6
7
8
9
10
11
12
├── app.js
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── user.js
└── views
    └── index.ejs

Blog Design

對express的模板程序有了基本概念後,咱們開始來實現一個稍微複雜的blog。
blog 須要實現下面的功能。express

1
2
3
4
5
/:首頁
/login:登陸
/reg:註冊
/post:發表文章
/logout:登出

blog 的數據存儲採用mongodb。npm

Improve

首先我門先簡單的改進下咱們當前的blog程序。

首先是重寫默認的路由

在 app.js 裏面咱們能夠看到如下兩行語句。

1
2
app.get('/', routes.index);
app.get('/users', user.list);

咱們把這部分代碼移到 routes/index.js 使代碼結構看起來更爲清晰。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
module.exports = function(app){    
    app.get('/',function(req,res){
        res.render('index', { title: '主頁' });
    });
    app.get('/reg',function(req,res){
        res.render('reg', { title: '註冊' });
    });
    app.post('/reg',function(req,res){
    });
    app.get('/login',function(req,res){
        res.render('login', { title: '登陸' });
    });
    app.post('/login',function(req,res){
    });
    app.get('/logout',function(req,res){
    });
    app.get('/post',function(req,res){
        res.render('post', { title: '發表' });
    });
    app.post('/post',function(req,res){
    }); 
};

同時在 app.js裏將上面兩行代碼替換成。

1
routes(app);

Ok,接下來咱們添加相應的ejs,實現後的前端界面結構應該如圖所示。

1
2
3
4
5
6
└── views
    ├── footer.ejs
    ├── header.ejs
    ├── index.ejs
    ├── login.ejs
    └── reg.ejs

footer.ejs

1
2
3
</article>
</body>
</html>

header.ejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Blog</title>
<link rel="stylesheet" href="stylesheets/style.css">
</head>
<body>

<header>
<h1><%= title %></h1>
</header>

<nav>
<span><a title="主頁" href="/">home</a></span>
<span><a title="登陸" href="/login">login</a></span>
<span><a title="註冊" href="/reg">register</a></span>
</nav>
<article>

index.ejs

1
2
3
<%- include header %>
這是主頁
<%- include footer %>

login.ejs

1
2
3
4
5
6
7
<%- include header %>
<form method="post">
用戶名:<input type="text" name="username" /><br />
密碼:   <input type="password" name="password" /><br />
        <input type="submit" value="登陸" />
</form>
<%- include footer %>

reg.ejs

1
2
3
4
5
6
7
8
<%- include header %>
<form method="post">
用戶名:<input type="text" name="username" /><br />
密碼:    <input type="password" name="password" /><br />
確認密碼:<input type="password" name="password-repeat" /><br />
        <input type="submit" value="註冊" />
</form>
<%- include footer %>

上面所作的工做簡單的歸納來講就是把整個 blog 的 header 和 footer 分離開,並按此創建相應的登錄,註冊頁面。

能夠經過訪問http://localhost:3000/ 來查看當前主頁。

mongo db

首先是安裝。mac下安裝mongodb很簡單。

1
2
brew update
brew install mongodb

測試

1
2
3
mongo
> db.test.save({a:1})
> db.test.find()

mongo db裝上後 開始安裝node js的依賴。

在 package.json 中加入。

1
2
"mongodb":"*",
"connect-mongo":"*"

運行

1
npm install

安裝完成後,咱們就可以在程序中對mongo db進行操做了。

咱們在blog下面新建 settings.js 用來存儲咱們blog程序的相關配置。

1
2
3
4
5
module.exports = { 
  cookieSecret: 'myblog', 
  db: 'blog', 
  host: 'localhost'
};

建立 models 目錄並新建 js 文件 db.js 用來操做 db

1
2
3
4
5
var settings = require('../settings'),
    Db = require('mongodb').Db,
    Connection = require('mongodb').Connection,
    Server = require('mongodb').Server;
module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT, {}));

而Package connect-mongo 是用來存儲會話信息到數據庫。

在 app.js 中添加。

1
2
var MongoStore = require('connect-mongo')(express);
var settings = require('./settings');

同時在 app.use(express.methodOverride()) 後面添加

1
2
3
4
5
6
7
app.use(express.cookieParser());
app.use(express.session({ 
      secret: settings.cookieSecret, 
      store: new MongoStore({ 
      db: settings.db 
   }) 
}));

其中 express.cookieParser() 是 Cookie 解析的中間件。express.session() 則提供會話支持,設置它的 store 參數爲 MongoStore 實例,把會話信息存儲到數據庫中,以免丟失。
在後面的小節中,咱們能夠經過 req.session 獲取當前用戶的會話對象,以維護用戶相關的信息。」
至此,數據庫的配置工做完成了,後面咱們就能夠用數據庫了。

結論

Express的代碼結構看起來仍是蠻清晰的,npm上的第三方的資源也很豐富。

因爲本人是Express的初學者,因此整個 blog 的過程也是徹底參考 【一塊兒學node.js (一)】用node+express搭建多人博客 這篇blog的內容,在此也感謝下原做者。

參考

【一塊兒學node.js (一)】用node+express搭建多人博客

相關文章
相關標籤/搜索