//導入模塊
const express = require('express');
//創建應用
const app = express();//設置路由
app.get('/',(req,resp)=>{//輸出響應console.log('request coming.............');resp.json(req.headers);
});app.get('/user/:id', (req, res) => {const userId = req.params.id; // 獲取 URL 中的路由參數res.send(`User ID: ${userId}`);
});app.get('/user/userId', (req,resp) => { resp.json({method: req.method,path: req.path,url: req.url,query: req.query,params: req.params,headers: req.headers,cookies: req.cookies,ip: req.ip || req.ips});
}); app.get('/user2/:id/name/:name', (req, res) => {const userId = req.params.id; // 獲取 URL 中的路由參數res.send(`User ID: ${userId}`);
});//多個路由函數app.get('/tt', (req,resp,next) => { console.log('${req.method} ${req.path}');next();
}, (req, resp) => {resp.send('首頁');
});function logger(req, resp, next) { console.log('${req.method} ${req.path}');next();
};function home(req, resp) { resp.send('首頁');
}app.get('/tt2', [logger, home]);//公共路由
app.get('/usr/login', (req, resp) => { resp.send('登錄頁面');
});
app.post('/usr/login', (req, resp) => { resp.send('登錄處理');
});
//將上面的兩個總方法合并為一個
app.route().get((req, resp) => { resp.send('登錄頁面');}).post((req, resp) => {resp.send('登錄處理');});app.listen(8080,()=>{console.log('listening on 8080');
});
模塊化路由
//Express 提供的Router 對象可以實現路由和入口JS的解耦,用于模塊化的路由有以下有點:
const express = require('express');
const router = express.Router();
router.get('/login', (req,resp) => { console.log('${req.method} ${req.path}');resp.send('登錄');
});router.get('/register', (req,resp) => { console.log('${req.method} ${req.path}');resp.send('注冊');
});module.exports = router; =====================================const express = require('express');
const router = express.Router();
router.get('/list', (req,resp) => { console.log('${req.method} ${req.path}');resp.send('動態列表');
});
module.exports = router;
=================================const express = require('express');
const router = express.Router();
router.get('/list', (req,resp) => { console.log('${req.method} ${req.path}');resp.send('動態列表');
});
module.exports = router; =========================================
//導入模塊
const express = require('express');
//創建應用
const app = express();const user = require('./user');
const timeline = require('./timeline');app.use('/user', user);
app.use('/timeline',timeline);app.listen(8080,()=>{console.log('listening on 8080');
});//上面的代碼最終會生成一下路由
// get /user/login
// get /user /register
// get /timeline/list
=============================================
請求獲取cookie
安裝cookie-parser
C:\Users\Administrator\Desktop\expres-example>npm install cookie-parser --save
added 2 packages in 3s
14 packages are looking for funding
run npm fund
for details
編寫代碼
//導入模塊
const express = require('express');
const cookieParser = require('cookie-parser');
//創建應用
const app = express();
app.use(cookieParser());
app.get('/',(req,resp)=>{//輸出響應console.log('request coming.............');resp.json({cookies: req.cookies});
});app.listen(8080,()=>{console.log('listening on 8080');
});
獲取請求體
安裝 body-parser
C:\Users\Administrator\Desktop\expres-example>npm install body-parser --save
up to date in 2s
14 packages are looking for funding
run npm fund
for details
編寫代碼
//導入模塊
const express = require(‘express’);
const cookieParser = require(‘cookie-parser’);
const bodyParser = require(‘body-parser’);
//創建應用
const app = express();
app.use(cookieParser());
app.use(bodyParser());
app.get(‘/’,(req,resp)=>{
//輸出響應
console.log(‘request coming…’);
resp.json({cookies: req.cookies});
});
Express 4.16.0版本開始 新版本已經不能使用了 報錯如下
Error: The bodyParser() generic has been split into individual middleware to use instead.
at bodyParser (c:\Users\Administrator\Desktop\expres-example\node_modules\body-parser\index.js:79:9)
at Object. (c:\Users\Administrator\Desktop\expres-example\src\cookie.js:8:9)
at Module._compile (node:internal/modules/cjs/loader:1730:14)
at Object…js (node:internal/modules/cjs/loader:1895:10)
at Module.load (node:internal/modules/cjs/loader:1465:32)
案例:
const express = require(‘express’);
const bodyParser = require(‘body-parser’);
const app = express();
// 解析 application/json 類型的數據
app.use(bodyParser.json());
// 解析 application/x-www-form-urlencoded 類型的數據
app.use(bodyParser.urlencoded({ extended: true }));
app.post(‘/your-endpoint’, (req, res) => {
console.log(req.body); // 這里可以訪問到POST請求的body參數
res.send(‘Data received’);
});
app.listen(3000, () => {
console.log(‘Server is running on port 3000’);
});
====================================
express 原始方式的post請求 參數獲取
//導入模塊
const express = require('express');
const cookieParser = require('cookie-parser');
//const bodyParser = require('body-parser');
//創建應用
const app = express();
app.use(cookieParser());
// 解析application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));// 解析 application/json
app.use(express.json()); //app.use(bodyParser());
app.get('/',(req,resp)=>{//輸出響應console.log('request coming.............');resp.json({cookies: req.cookies});
});
app.post('/user',(req,resp)=>{//輸出響應console.log('request coming.............');resp.json(req.body);
});
app.listen(8080,()=>{console.log('listening on 8080');
});
使用raw-body中間件(對于非JSON/URL編碼的body)
如果你需要處理非JSON或URL編碼格式的body(例如,原始的二進制數據),你可以使用raw-body中間件。首先,安裝raw-body
npm install raw-body
const express = require('express');
const rawBody = require('raw-body');
const app = express();app.use((req, res, next) => {rawBody(req, {length: req.headers['content-length'],limit: '1mb', // 設置最大限制大小,防止內存溢出encoding: rawBody.TEXT // 或者 rawBody.RAW,根據需要選擇文本或原始二進制數據格式}, (err, string) => {if (err) return next(err); // 處理錯誤情況req.text = string; // 將解析后的文本或二進制數據添加到req對象上,以便后續處理next(); // 繼續執行下一個中間件或路由處理函數});
});app.post('/your-endpoint', (req, res) => {console.log(req.text); // 這里可以訪問到POST請求的原始body數據(文本或二進制)res.send('Data received');
});app.listen(3000, () => {console.log('Server is running on port 3000');
});
==========================================
響應對象:
repsonse.status() 響應狀態
response.set(field[,value]) 設置響應包頭
response.download() 通過設置 Content-Disposition 響應頭提示客戶端下載
response.download(path[,filename],[,option],[,callback])
app.get('/download', function(req, res) {var filePath = '/path/to/file'; // 文件路徑var fileName = 'example.txt'; // 可選的文件名res.download(filePath, fileName);
});
response.end() 結束響應
response.redirect() 重定向
response.render() 頁面渲染
response.cookie() 設置cookie
cookie 包含的屬性:
name
value
options 選項:
domain 域名
expire GMT 到期時間,如果沒有設置或者為0 ,則關閉瀏覽器之后失效
httpOnly 講cookie標記為只有http 服務請求才能訪問
maxAge : 以毫秒為單位的過期時間,比expire GMT更靈活
path cookie 的路徑
secure 標記只有在https 協議下才能請求
signed 表示是否對 cookie 簽名
repsones.send() 發送http 響應