express框架入門
什么是express
- Express 是一個簡潔而靈活的 node.js Web應(yīng)用框架, 提供了一系列強大特性幫助你創(chuàng)建各種 Web 應(yīng)用烫罩,和豐富的 HTTP 工具。
使用 Express 可以快速地搭建一個完整功能的網(wǎng)站马僻。
Express 框架核心特性:
- 可以設(shè)置中間件來響應(yīng) HTTP 請求。
- 定義了路由表用于執(zhí)行不同的 HTTP 請求動作杠巡。
- 可以通過向模板傳遞參數(shù)來動態(tài)渲染 HTML 頁面派歌。
簡單點說express就是一個封裝了很多功能的包,而你只需要用簡單的express的專屬的一些代碼便可解決本來正常較為復(fù)雜的代碼含滴,方便你使用
使用express
- 進入一個目錄當(dāng)作工作目錄
- 然后通過 npm init 命令為你的應(yīng)用創(chuàng)建一個package.json 文件诱渤。(其中會輸入?yún)?shù),但可回車使用默認(rèn)參數(shù))
- 然后使用npm install express --save安裝express
- 然后在你工程文件中引入
var express=require("express");
var app=express();
框架中目錄結(jié)構(gòu)
app.js: 啟動文件谈况,或者說入口文件勺美。
package.json: 存儲著工程的信息及模塊依賴递胧,當(dāng)在 dependencies 中添加依賴的模塊時, 運行 npm install 赡茸,npm 會檢查當(dāng)前目錄下的 package.json缎脾,并自動安裝所有指定的模塊。
node_modules: 存放 package.json 中安裝的模塊占卧,當(dāng)你在 package.json 添加依賴的模塊并安裝后遗菠,存放在這個文件夾下。
public: 存放 image华蜒、css辙纬、js 等文件。
routes: 存放路由文件友多。
views: 存放視圖文件或者說模板文件牲平。
一、app.js作用
通過require()加裝了express域滥、path等模塊纵柿,以及routes文件夾下的index.js和users.js路由文件。
1生成一個express實例app启绰。
var app = express();
2設(shè)置 views 文件夾為存放視圖文件的目錄, 即存放模板文件的地方,__dirname 為全局變量,存儲當(dāng)前正在執(zhí)行的腳本所在的目錄昂儒。
app.set('views', path.join(__dirname, 'views'));
3設(shè)置視圖模板引擎為 ejs。
app.set('view engine', 'ejs');
4加裝解析json的中間件
app.use(bodyParser.json());
5 加裝日志中間件
app.use(logger('dev'));
6 加載解析urlencoded請求體的中間件委可。
app.use(bodyParser.urlencoded({ extended: false }));
7加載解析cookie的中間件渊跋。
app.use(cookieParser());
8 設(shè)置public文件夾為存放靜態(tài)文件的目錄。
app.use(express.static(path.join(__dirname, 'public')));
9 路由控制器着倾。
app.use('/', routes);
app.use('/users', users);
10 捕獲404錯誤拾酝,并轉(zhuǎn)發(fā)到錯誤處理器。
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
11 開發(fā)環(huán)境下的錯誤處理器卡者,將錯誤信息渲染error模版并顯示到瀏覽器中蒿囤。
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
12 生產(chǎn)環(huán)境下的錯誤處理器,不會將錯誤信息泄露給用戶崇决。
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
13 導(dǎo)出app實例供其他模塊調(diào)用材诽。
module.exports = app;
二、 bin/www 文件:?
(1)#!/usr/bin/env node:表明是 node 可執(zhí)行文件恒傻。
(2)var debug = require(‘debug’)(‘blog’):引入debug模塊脸侥,打印調(diào)試日志。
(3)var app = require(‘../app’):引入我們上面導(dǎo)出的app實例盈厘。
(4)app.set(‘port’, process.env.PORT || 3000):設(shè)置端口號睁枕。
(5)?
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
啟動工程并監(jiān)聽3000端口,成功后打印 Express server listening on port 3000。
三譬重、 routes/index.js 文件:
生成一個路由實例用來捕獲訪問主頁的GET請求拒逮,導(dǎo)出這個路由并在app.js中通過app.use(‘/’, routes); 加載罐氨。這樣臀规,當(dāng)訪問主頁時,就會調(diào)用res.render(‘index’, { title: ‘Express’ });渲染views/index.ejs模版并顯示到瀏覽器中栅隐。
四塔嬉、 views/index.ejs 文件:
在渲染模板時我們傳入了一個變量 title 值為 express 字符串,模板引擎會將所有 <%= title %> 替換為 express 租悄,然后將渲染后生成的html顯示到瀏覽器中谨究,如上圖所示。
基本框架的作用就是這些泣棋,到具體的功能實現(xiàn)的代碼再自己仔細去查詢胶哲。
express還有許多中間件的使用例如body-parser,cookie等這些需要用的時候潭辈,再仔細去學(xué)習(xí)查詢