【nodejs笔记3】Express基本用法,和路由控制,和模板渲染ejs
1. 路由控制的工作原理
//routes/index.js中的代碼//訪問主頁時,調用ejs模板引擎,渲染index.ejs模板文件,生成靜態頁面,并顯示在瀏覽器中。
router.get('/', function(req, res) { //捕獲訪問主頁的GET請求res.render('index', { title: 'Express' }); });
官方給出的寫法是在 app.js 中實現了簡單的路由分配,然后再去 index.js 中找到對應的路由函數,最終實現路由功能。
我們不妨把路由控制器和實現路由功能的函數都放到 index.js 里,app.js 中只有一個總的路由接口。
?修改后的app.js
1 //通過require()加載express、path模塊。以及routes文件夾下的index.js 和user.js路由文件 2 var express = require('express'); 3 var path = require('path'); 4 var favicon = require('serve-favicon'); 5 var logger = require('morgan'); 6 var cookieParser = require('cookie-parser'); 7 var bodyParser = require('body-parser'); 8 //加載路由文件 9 var routes = require('./routes/index'); 10 var users = require('./routes/users'); 11 12 var app = express(); //生成一個express實例app 13 14 app.set('port', process.env.PORT||3000);//第一章 添加 15 // view engine setup 16 app.set('views', path.join(__dirname, 'views'));//設置 views 文件夾為存放視圖文件的目錄, 即存放模板文件的地方,__dirname 為全局變量,存儲當前正在執行的腳本所在的目錄。 17 app.set('view engine', 'ejs');// 設置視圖模板引擎為 ejs 18 19 // uncomment after placing your favicon in /public 20 //app.use(favicon(__dirname + '/public/favicon.ico')); //設置/public/favicon.ico為favicon圖標 21 app.use(logger('dev'));//加載日志中間件 22 app.use(bodyParser.json());//加載解析json的中間件 23 app.use(bodyParser.urlencoded({ extended: false }));//加載解析urlencoded請求體的中間件 24 app.use(cookieParser());//加載解析cookie的中間件 25 app.use(express.static(path.join(__dirname, 'public')));//設置public文件夾為存放靜態文件的目錄 26 27 ////路由控制器 第一章 刪減 28 //app.use('/', routes); 29 //app.use('/users', users); 30 31 //第一章 添加 32 routes(app); 33 app.listen(app.get('port'),function(){ 34 console.log('Express server listening on port' + app.get('port')); 35 }); 36 37 // catch 404 and forward to error handler 捕獲404錯誤,并轉發到錯誤處理器。 38 app.use(function(req, res, next) { 39 var err = new Error('Not Found'); 40 err.status = 404; 41 next(err); 42 }); 43 44 // error handlers 45 46 // development error handler 47 // will print stacktrace 48 //開發環境下的錯誤處理器,將錯誤信息渲染error模版并顯示到瀏覽器中。 49 if (app.get('env') === 'development') { 50 app.use(function(err, req, res, next) { 51 res.status(err.status || 500); 52 res.render('error', { 53 message: err.message, 54 error: err 55 }); 56 }); 57 } 58 59 // production error handler 60 // no stacktraces leaked to user 61 //生產環境下的錯誤處理器,將錯誤信息渲染error模板并顯示到瀏覽器中。 62 app.use(function(err, req, res, next) { 63 res.status(err.status || 500); 64 res.render('error', { 65 message: err.message, 66 error: {} 67 }); 68 }); 69 70 //module.exports = app;//導出app實例并供其它模塊使用index.js
1 //var express = require('express'); 2 //var router = express.Router(); //創建路由實例 3 // 4 ///* GET home page. */ 5 //router.get('/', function(req, res) { //捕獲訪問主頁的GET請求 6 // res.render('index', { title: 'Express' }); 7 //}); 8 // 9 //module.exports = router;//導出路由,并在app中以app.use('/',routes)加載 10 11 12 module.exports = function(app){ 13 app.get('/',function(req,res){ 14 res.render('index',{title: 'Express'}); 15 }); 16 app.get('/test',function(req,res){ 17 res.send('hello world!'); 18 }) 19 };2. 路由規則
express 封裝了多種 http 請求方式,主要使用?app.get()?和app.post()?
//第一個參數為請求的路徑,第二個參數為回調函數(包括req和res兩個參數,分別代表請求信息和響應信息)。app.get(**,function(req,res){***});app.post(**,function(req,res){***});
路徑請求及對應的獲取路徑有以下幾種形式:
- req.query: 處理 get 請求,獲取 get 請求參數
- req.params: 處理 /:xxx 形式的 get 或 post 請求,獲取請求參數
- req.body: 處理 post 請求,獲取 post 請求體
- req.param(): 處理 get 和 post 請求,但查找優先級由高到低為 req.params→req.body→req.query
3. ?添加路由規則
瀏覽器打開http://localhost:3000/ 返回“Welcome to Express”界面
? ? ? ? 打開http://localhost:3000/test, 返回 “404 Not Found”
此時,添加路由:
在index.js 中,添加響應,如下:
之后,打開http://localhost:3000/test,就可以返回“hello world!”界面了。
【上述test,看完效果還回復原代碼】
4. 模板渲染ejs
//__dirname+'/views'為存放視圖文件的目錄 app.set('views', __dirname + '/views'); //設置模板引擎為ejs app.set('view engine', 'ejs');ejs 的標簽系統非常簡單,它只有以下三種標簽:
- <% code %>:JavaScript 代碼。
- <%= code %>:顯示替換過 HTML 特殊字符的內容。
- <%- code %>:顯示原始 HTML 內容。
這里我們不使用layout進行頁面布局,而是使用更為簡單靈活的include。include 的簡單使用如下:
<%- include a %> hello,world! <%- include b %>?
轉載于:https://www.cnblogs.com/xujingbo/p/4166090.html
總結
以上是生活随笔為你收集整理的【nodejs笔记3】Express基本用法,和路由控制,和模板渲染ejs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 邮政二类卡限额
- 下一篇: 最小公倍数与最大公约数