express
簡介
web開發框架
下載
npm install express
中間件
中間件方法和請求處理函數
app.get(‘請求路徑’,‘處理函數’)
app.post(‘請求路徑’,‘處理函數’)
// * 表示匹配任何路徑
app.get('*', (req, res, next) => {
console.log(++i);
next();
});
app.get('/req1', (req, res) => {
console.log(2222);
res.send();
});
處理get請求參數
req.query
const express = require('express');
// 一箇中間件
const bodyParser = require('body-parser');
// 創建網站服務器
const app = express();
app.get('/req1', (req, res) => {
res.send(req.query.a + "-" + req.query.b);
});
app.listen(7788);
consol ning');
處理post請求參數
使用中間件 body-parser
通過req.body
const express = require('express');
// 一箇中間件
const bodyParser = require('body-parser');
// 創建網站服務器
const app = express();
// querystring "a=10&b=20"--->{a:10,b:20}
// 使用中間件,任何請求都會先走它,會處理post請求
// 參數爲true使用第三方模塊qs, false用的是nodejs中querystring
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/post', (req, res) => {
console.log(req.body);
res.send(req.body);
});
app.listen(7788);
console.log('app is running');
postman 模擬各種請求
中間件app.use()
基礎認識:
const express = require('express');
let app = express();
// 中間件 app.use() 不傳參數匹配所有請求方式
app.use('/index', (req, res, next) => {
console.log(111);
next();
});
app.get('/req', (req, res) => {
res.send('req');
});
app.listen(7788);
app.use()基礎應用
const express = require('express');
// 創建網站服務器
const app = express();
// app.use((req, res, next) => {
// res.send('公司網站正在維護,請於明日早八點後訪問');
// });
app.use('/index', (req, res, next) => {
let isLogin = true;
if (isLogin) {
next();
} else {
res.send('請登錄後訪問主頁');
}
});
app.get('/index', (req, res) => {
res.send('Hello World');
});
app.use((req, res, next) => {
res.send('您訪問的資源不存在');
});
app.listen(7788);
console.log('app is running');
使用app.use()處理錯誤
const express = require('express');
const fs = require('fs');
// 創建網站服務器
const app = express();
app.get('/index', (req, res, next) => {
//throw new Error('something is wrong');
//console.log(111);
//next();
fs.readFile('./21.js', 'utf8', (err, data) => {
if (err != null) {
next(err);
} else {
res.send(data);
}
});
});
// 處理錯誤中間件 前面有拋錯或者next()傳參數下面就會被執行
app.use((err, req, res, next) => {
console.log(333);
res.status(500).send('服務器內部發生未知錯誤');
});
app.listen(7788);
console.log('app is running');
例二
const express = require('express');
const fs = require('fs');
const readFile = require('util').promisify(fs.readFile); // 將異步代碼 轉換爲promise
const app = express();
app.get('/admin', async (req, res, next) => {
try {
let result = await readFile('./1.js');
console.log(result.toString());
} catch (err) {
next(err);
}
});
app.use((err, req, res, next) => {
res.status(500).send(err.message);
})
app.listen(7788);
路由
可以實現類似
localhost:9999/static/index.html
ocalhost:9999/static/news.html
const express = require('express');
const app = express();
// 創建路由對象
const home = express.Router();
// 相當於一級路由
home.get('/', (req, res) => {
res.send('wel');
});
// /home/index 二級路由
home.get('/index', (req, res) => {
res.send('welcome');
});
app.use('/home', home); // 給路由對象匹配路徑
app.listen(9999);
const express = require('express');
const app = express();
// /user/.. 都能夠匹配
app.get('/user/:id', (req, res) => {
res.send(req.params); // {"id":":99"}
// http://localhost:9999/user/99
});
app.listen(9999);
express.static()
可以託管靜態文件
const express = require('express');
const path = require('path');
const app = express();
// 此文件同路徑下有個public文件夾 用於存在靜態文件
// app.use(express.static(__dirname + '/public')); //設置靜態文件目錄 參數爲路徑
// localhost:9999/index.html
app.use('/static', express.static(path.join(__dirname, 'public'))); //設置靜態文件目錄 參數爲路徑
// localhost:9999/static/index.html
app.listen(9999);
express && template
需要兩個工具 express-art-template && art-template
const express = require('express');
const path = require('path');
const app = express();
// 配置模板引擎
app.engine('art', require('express-art-template'));
// 設置模板存放的目錄 此文件同路徑下有個views文件夾,存放模板
app.set('views', path.join(__dirname, 'views'));
// 設置默認的模板擴展名
app.set('view engine', 'art'); // 公共模板數據
app.locals.msg = 'helloword';
app.get('/index', (req, res) =>{
res.render('index'); // 調用模板
});
app.get('/news', (req, res) =>{
res.render('news');
});
app.listen(9999);