簡介及資料
Node.js提供了http模塊溉奕,這個(gè)模塊中提供了一些底層接口三痰,可以直接使用欠橘,可以看看這個(gè)
http://nodejs.org/api/http.html
Express是一個(gè)輕量級(jí)涛酗、簡潔欺矫、易用的Node.js Web MVC開發(fā)框架,它基于Node.js原有進(jìn)行了很多Web開發(fā)所需的功能封裝
http://expressjs.com/
https://www.npmjs.org/package/express
安裝
官網(wǎng)http://expressjs.com/
express4.X的有一些變化篮奄,4.x版本中將命令工具單獨(dú)分出來了(https://github.com/expressjs/generator),所有要先按裝express-generator捆愁,否則創(chuàng)建項(xiàng)目時(shí),會(huì)提示express命令沒找到
npm install -g express-generator
https://github.com/expressjs/express#quick-start
npm install -g express
查看express版本
express --version
這邊存在一個(gè)誤區(qū)窟却,網(wǎng)上很多都是直接用express -v (express -V) 這個(gè)指令昼丑,我不是很清楚是不是4.0版本之前的是識(shí)別的,但是這個(gè)指令出來是這樣的夸赫。
express -v
這里所指的 -v 是 --view.
運(yùn)行第一個(gè)基于express框架的Web
1.創(chuàng)建一個(gè)expressWebApp
到指定工作目錄下執(zhí)行
可以看到此時(shí)的package.json
2.安裝依賴項(xiàng)
我們看下這個(gè)指令菩帝,他自動(dòng)生成了一個(gè)新的package.json。
npm init
注意上一步安裝成功后的提示,需要cd到網(wǎng)站目錄呼奢,并執(zhí)行npm install命令安裝項(xiàng)目依賴項(xiàng)(可以在項(xiàng)目的package.json文件的dependencies節(jié)點(diǎn)下看到需要哪些依賴)
npm install
3.運(yùn)行app.js文件宜雀,添加監(jiān)聽啟動(dòng)服務(wù)。
在expressWebApp根目錄下找到app.js并增加端口監(jiān)聽控妻,在sublime中Ctrl+B運(yùn)行
app.listen(3000,function(){
console.log("Server Start!");
});
4.瀏覽器訪問效果
相關(guān)提示:
1.在sublime中運(yùn)行過后州袒,如果想要關(guān)閉揭绑,去任務(wù)管理器中結(jié)束node.exe進(jìn)程
2.不在sublime中運(yùn)行弓候,可以在cmd中執(zhí)行node app,關(guān)閉使用快捷鍵Ctrl+C
模版引擎 ejs
ejs:Embedded JavaScript
https://github.com/visionmedia/ejs
1.創(chuàng)建一個(gè)express + ejs的項(xiàng)目
生成環(huán)境
express -e ejsWebApp
安裝依賴
cd ejsWebApp
npm install
express參數(shù)
Usage: express [options] [dir]
Options:
-h, --help output usage information
-V, --version output the version number
-e, --ejs add ejs engine support (defaults to jade)
-H, --hogan add hogan.js engine support
-c, --css <engine> add stylesheet <engine> support (less|stylus|compass) (d
efaults to plain css)
-f, --force force on non-empty directory
2.創(chuàng)建成功后他匪,打開app.js菇存,添加3000端口監(jiān)聽
app.listen(3000,function(){
console.log("ejs Server Start!");
});
3.打開routes文件夾下index.js,并修改代碼如下
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: '<h1>Express</h1>'
,users:[{username: 'Tiany'},
{username: 'Tiany Zhong'},
{username: 'Zhong Dian'}]
});
});
module.exports = router;
4.打開views文件夾下index.ejs,并修改代碼如下
<!DOCTYPE html>
<html>
<head>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<%= title %>
<%- title %>
<% users.forEach(function(user){ %>
<h5><%= user.username %></h5>
<% }) %>
</body>
</html>
5.瀏覽器結(jié)果
node app
當(dāng)我們訪問 http://localhost:3000時(shí)邦蜜,app.js 中 app.use('/', index); 會(huì)轉(zhuǎn)到index.js依鸥,而index.js而index.ejs傳遞了title和users對象作為參數(shù),細(xì)節(jié)以后我們再探討悼沈。
這里重點(diǎn)看看index.ejs
ejs結(jié)尾的文件就是模版文件贱迟,可以看到在文件中我們用了三種標(biāo)簽方式(這種標(biāo)簽方式有過其它web開發(fā)經(jīng)驗(yàn)的應(yīng)該很好看懂)
1.<%= %>
這個(gè)標(biāo)簽在接到收到title: < h1 >Express< /h1 >時(shí),從顯示效果來看絮供,他直接輸出HTML標(biāo)簽到頁面上衣吠,輸出的是轉(zhuǎn)義后的變量值
2.<%- %>
而這個(gè)標(biāo)簽,從顯示效果上看壤靶,他沒有直接輸出HTML代碼到頁面上缚俏,輸出的是沒有轉(zhuǎn)義后的變量值
3.<% %>
而這個(gè)標(biāo)簽,從顯示上看贮乳,他循環(huán)了出來參數(shù)中的值忧换,標(biāo)簽中是javascript邏輯代碼,注意括號(hào)的開閉合
express項(xiàng)目結(jié)構(gòu)
1.node_modules文件夾
這文件夾就是在創(chuàng)建完項(xiàng)目后向拆,cd到項(xiàng)目目錄執(zhí)行npm install后生成的文件夾亚茬,下載了項(xiàng)目需要的依賴項(xiàng)
2.package.json文件
此文件是項(xiàng)目的配置文件(可定義應(yīng)用程序名,版本浓恳,依賴項(xiàng)等等)
node_modules文件夾下的依賴項(xiàng)是從哪里知道的呢才写?原因就是項(xiàng)目根目錄下的這個(gè)package.json文件,執(zhí)行npm install時(shí)會(huì)去找此文件中的dependencies奖蔓,并安裝指定的依賴項(xiàng)
3.public文件夾(包含images赞草、javascripts、stylesheets)
這個(gè)文件夾做過Web開發(fā)的應(yīng)該一看就知道吆鹤,為了存放圖片厨疙、腳本、樣式等文件的
4.routes文件夾
用于存放路由文件疑务,
5.views文件夾
用于存放模版文件
express項(xiàng)目分析
先從app.js看起
1.app.set(name,value)
把名字為name的項(xiàng)的值設(shè)為value沾凄,用于設(shè)置參數(shù)
app.set('views', path.join(__dirname, 'views')); 設(shè)置了模版文件夾的路徑梗醇;__dirname是node.js中的全局變量,表示取當(dāng)前執(zhí)行文件的路徑
app.set('view engine', 'ejs'); 設(shè)置使用的模版引擎撒蟀,我們使用的ejs
2.app.use([path], function)
用這個(gè)方法來使用中間件叙谨,因?yàn)閑xpress依賴于connect,有大量的中間件保屯,可以通過app.use來使用手负;path參數(shù)可以不填,默認(rèn)為'/' .
app.use(express.static(path.join(__dirname, 'public'))); 這一句中可能要注意一下姑尺,express.static( )是處理靜態(tài)請求的竟终,設(shè)置了public文件,public下所有文件都會(huì)以靜態(tài)資料文件形式返回(如樣式切蟋、腳本统捶、圖片素材等文件)
var routes = require('./routes/index');
var users = require('./routes/users');
app.use('/', routes);
app.use('/users', users);
上面代碼表示當(dāng)用戶使用/訪問時(shí),調(diào)用routes柄粹,即routes目錄下的index.js文件喘鸟,其中.js后綴省略,用/users訪問時(shí)驻右,調(diào)用routes目錄下users.js文件
3.app.get(name)
獲取名為name的項(xiàng)的值
4.路由文件index.js
router.get('/', function(req, res) {
res.render('index', { title: '<h1>Express</h1>'
,users:[{username: 'Tiany'},
{username: 'Tiany Zhong'},
{username: 'Zhong Dian'}]
});
});
這段表示什黑,router.get表示通過get請求/時(shí),響應(yīng)后面的function處理旺入,兩個(gè)參數(shù)分別是request兑凿、response;
res.render表示調(diào)用模版引擎解析名字index的模板茵瘾,傳并傳入了title和users兩個(gè)對象做為參數(shù)礼华;
此外 解析views目錄下的index.ejs?原因就是app.js中的設(shè)置:
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
而這兩個(gè)參數(shù)在index.ejs中可以使用,最后就是我們看到的頁面展示效果了拗秘。
內(nèi)容大多是根據(jù)書籍和網(wǎng)上資料的總結(jié)圣絮,結(jié)合自己實(shí)踐中遇到問題做了記錄和總結(jié),其中描述可能不是很準(zhǔn)確雕旨,還有許多內(nèi)容沒有細(xì)究扮匠,若是存在問題,還望大神指正建議凡涩。