req.fresh ใน ExpressJS

ใน ExpressJS, req.fresh เป็นคุณสมบัติที่ระบุว่าคำขอยังคงสดอยู่หรือไม่

คุณสมบัตินี้สามารถเข้าถึงได้จากตัวจัดการเส้นทางและตัวจัดการข้อผิดพลาด อนุญาตให้คุณตรวจสอบว่าผู้ใช้ต้องการรับข้อมูลใหม่หรือไม่

คุณสมบัติ req.fresh จะเท่ากับ true หากคำขอตรงกับเงื่อนไขต่อไปนี้:

  • วิธีการ HTTP คือ GET หรือ HEAD
  • ไม่มีการส่งข้อมูลใดๆ ในคำขอ
  • มีการระบุพารามิเตอร์ Cache-Control: max-age=0 หรือ Cache-Control: no-cache ในคำขอ
  • มีการระบุพารามิเตอร์ If-Modified-Since หรือ If-None-Match ในคำขอ และค่าของพารามิเตอร์ตรงกับค่าที่ส่งคืนโดยเซิร์ฟเวอร์ในคำขอก่อนหน้า

หากคุณสมบัติ req.fresh เท่ากับ true คุณควรส่งคืนคำตอบที่มีสถานะ HTTP 304 (Not Modified) แทนที่จะส่งคืนข้อมูลใหม่ทั้งหมด

ตัวอย่างเช่น โค้ดต่อไปนี้จะส่งคืนคำตอบ HTTP 304 หากคำขอยังคงสดอยู่:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const express = require('express');

const app = express();

app.get('/', (req, res) => {
// ตรวจสอบว่าคำขอยังคงสดอยู่หรือไม่
if (req.fresh) {
res.status(304);
res.end();
} else {
// ส่งคืนข้อมูลใหม่
res.send('Hello, World!');
}
});

app.listen(3000, () => {
console.log('Server started on port 3000');
});

โค้ดนี้จะใช้คุณสมบัติ req.fresh เพื่อตรวจสอบว่าคำขอยังคงสดอยู่หรือไม่ หากคำขอยังคงสดอยู่ โค้ดนี้จะส่งคืนคำตอบ HTTP 304 หากคำขอไม่ได้ยังคงสดอยู่ โค้ดนี้จะส่งคืนข้อมูลใหม่

เมื่อคุณส่งคำขอ GET ไปยัง URL / ด้วยพารามิเตอร์ Cache-Control: max-age=0 ในหัวเรื่องคำขอ คุณจะเห็นคำตอบ HTTP 304