一、express介紹:html
Express是簡介靈活的nodeJs web應用開發框架node
它提供了一系列強大的功能:路由控制、參數獲取、中間件、send和sendFie、web
靜態文件服務器、模板解析、重定向express
二、使用express:npm
安裝:npm install expressjson
三步驟:數組
var express = require("express");服務器
var app = express();cookie
app.listen(8080);app
三、路由:
get請求: app.get( '/', function( req, res ){ res.end("首頁") })
-- request: 請求對象 獲取客戶端的請求
-- response: 響應對象 向客戶端發送響應
-- ren.end() 只能放字符串+buffer,
-- ren.send() 能接任何類型的參數
app.all: app.all("*",function( req, res ){ res.end("此頁面不存在") })
-- all匹配全部的方法名, * 代碼匹配全部的路徑
/* 用戶: user/signup 登陸 user/signin 註冊 user/sigout 退出
文章: article/add 添加文章 article/list 文章列表 */
四、獲取請求參數:
app.get("/food",function (req,res) {
console.log( req.method ); //請求方法
console.log( req.url ); //請求的url
console.log( req.path ); //pathname /food
console.log( req.query ); //查詢字符串對象
console.log( req.headers ); //請求頭對象
res.end();
});
params路徑參數:"/user/:id/:name"
app.get("/user/:id/:name" , function(){
console.log( req.params.id ); //動態傳遞id,根據id獲取相關內容
console.log( req.params.name );
console.log( req.params.host );
//獲取端口號+域名
console.log( req.headers ); //整個頭部信息
console.log( req.headers.host ); //獲取端口號+域名,單獨獲取只須要分割一下。
})
例子:
五、中間件 - use:
use的做用:一、添加公共的處理邏輯。 二、給請求或響應對象上增長公用的方法和屬性 req.path
app.use('/',function( req, res, next ){
//中間件自己也是一個函數
//next 是一個函數,調用它表示向下執行, 不調用會直接卡在此處或者直接結束
})
六、靜態文件 public
-- public:參數是靜態文件根目錄
-- path.join( __dirname, 'public' ) 當前文件的絕對路徑
-- path.resolve('public') 與上相等,找到public的絕對路徑
-- 此中間件先會去靜態目錄下找,找到直接返回,未找到,next向下執行看有沒有路由能執行
app.use( express.static( path.resolve('public') ) ); //匹配全部
app.use('/user', express.static( path.resolve('public') ) ); //匹配user
設置模板引擎
app.set('view engine','html'); // ejs html設置模板引擎,就至關於設置了一個變量,用get讀
app.set('views',path.resolve('views') ); //設置模板存放的根目錄 前:key 後:目錄
app.engine('html',require('ejs').__express ); //若是模板後綴是html的話 用ejs的方法渲染來進行 ejs須要安裝
-- 多個模板都會用到的變量,並且變量值都同樣的狀況下 ,能夠提取出來寫
app.use(function (req,res,next) {
res.locals.title = "title";
next();
});
app.get('/users',function (req,res,next) { // get 配置路由 + 獲取變量
res.locals.users = users ; //真正渲染的時候,會把數據對象的屬性所有拷貝給 res.locals
res.render( 'user.html',{ users:users , title:"title" } ); // 1參:相對路徑,相對於views的 2參:數據對象
//渲染視圖,只能寫至關於路徑 後綴可略
//res.render( 'user' );
});
解析json:
-- body-parser 須要安裝; npm install body-parser
var bodyParser = require('body-parser'); //解析json
--當請求體的類型是urlencoded格式的話,用此中間件請求體轉成對象
--url只能放ascii,128個,若是傳中文,要將中文轉ascii使用 encodeURIComponent('中文');
app.use( bodyParser.urlencoded( {extended:true} ) ); //解析設置 提交表單的時候
app.use( bodyParser.json() );
eg:
var express = require("express");
var path = require("path");
var bodyParser = require("body-parser"); //解析json
var cookieParser = require('cookie-parser'); //cookie-parser
var app = express();
app.use( cookieParser() ); //使用cookieParser中間件只會 會增長req.cookies屬性
app.use( bodyParser.urlencoded( { extended:true }) ); //解析設置
app.use( bodyParser.json() );
app.set('view engine','html');
app.set("views",path.resolve('views'));
app.engine('html',require('ejs').__express ); //解析html中的ejs
var users =[];
/*---------------------註冊--------------------*/
app.get('/signup',function (req,res) {
var error = req.cookies.error;
res.clearCookie('error'); //清除cookies
res.render('up',{ error });
});
app.post('/signup',function (req,res,next) {
var user = req.body;
//找一下用戶數組中有沒有相同用戶名的用戶
var oldUser = users.find(function ( item ) {
return item.username == user.username;
});
if(oldUser){ //找到了用戶名,跳到註冊頁重寫
res.cookie('error','此用戶名已經被佔用');
res.redirect('back'); }else { //沒找到就註冊,而且跳到登錄頁面 users.push( user ); res.redirect('/signin') } }); /*-------------------登錄----------------------*/ app.get('/signin',function (req,res) { var error = req.cookies.error; res.clearCookie('error'); //清除cookies res.render('in'); }); app.post('/signin',function (req,res,next) { var user = req.body; var flag = users.find(function ( item ) { return user.username == item.username && user.password == item.password }); if( flag ){ res.cookie('yes','登錄成功...'); res.redirect('/welcome') }else { res.cookie('error','用戶名密碼錯誤'); //error會覆蓋上面的error res.redirect('back'); } }); app.get('/welcome',function (req,res,next) { var yes = req.cookies.yes; res.render('welcome',{ yes }) }) app.listen(9090);