HTTP প্রতিক্রিয়া বস্তু
Node.js HTTP (http.ServerResponse) HTTP , . 'request' callback .
এই বস্তুটি ক্লায়েন্টে ডেটা ফেরত দিতে এবং WritableStream ইন্টারফেস প্রয়োগ করতে ব্যবহৃত হয়। রেসপন্স অবজেক্ট হল কিভাবে সার্ভার ক্লায়েন্টের কাছে ডাটা পাঠায় যেটি অনুরোধ করেছে।
উত্তর বস্তু ব্যবহার করে
const http = প্রয়োজন('http'); // একটি HTTP সার্ভার তৈরি করুন const সার্ভার = http.createServer((req, res) => { // 'res' হল ServerResponse অবজেক্ট res.statusCode = 200; res.setHeader('কন্টেন্ট-টাইপ', 'টেক্সট/প্লেইন'); res.end('হ্যালো ওয়ার্ল্ড\n'); }); server.listen(8080, () => { console.log('সার্ভার http://localhost:8080/' এ চলছে); });
উত্তর বৈশিষ্ট্য
| বৈশিষ্ট্য | ব্যাখ্যা |
|---|---|
| response.finished | প্রতিক্রিয়া সম্পূর্ণ কিনা তা নির্দেশ করে একটি বুলিয়ান |
| response.headersSent | একটি বুলিয়ান নির্দেশ করে যে হেডার ক্লায়েন্টকে পাঠানো হয়েছে কিনা |
| response.sendDate | সত্য হলে, তারিখ শিরোনামটি স্বয়ংক্রিয়ভাবে তৈরি হয় এবং ইতিমধ্যে সেট না থাকলে প্রতিক্রিয়াতে পাঠানো হয়। ডিফল্ট: সত্য |
| response.statusCode | স্ট্যাটাস কোড ক্লায়েন্টকে পাঠানো হয়েছে (যেমন, 200, 404, 500) |
| response.statusMessage | ক্লায়েন্টকে পাঠানো একটি স্ট্যাটাস মেসেজ |
| response.socket | মৌলিক সকেট একটি রেফারেন্স |
| response.writableEnded | response.end() boolean |
| response.writableFinished | একটি বুলিয়ান নির্দেশ করে যে সমস্ত ডেটা অন্তর্নিহিত সিস্টেমে ফ্লাশ করা হয়েছে কিনা |
প্রতিক্রিয়া মোড
| পদ্ধতি | ব্যাখ্যা |
|---|---|
| response.addTrailers(headers) | প্রতিক্রিয়াতে HTTP ট্রেলিং হেডার যোগ করে |
| response.cork() | প্রতিক্রিয়াতে লেখা ডেটাকে বাফার করতে বাধ্য করে৷ |
| response.end([data[, encoding]][, callback]) | সার্ভারে সংকেত যে সমস্ত প্রতিক্রিয়া হেডার এবং বডি পাঠানো হয়েছে |
| response.flushHeaders() | প্রতিক্রিয়া শিরোনাম ফ্লাশ করে |
| response.getHeader(name) | আউটগোয়িং হেডারের মান পায় যা সারিবদ্ধ কিন্তু এখনও পাঠানো হয়নি |
| response.getHeaderNames() | বহির্গামী বার্তার জন্য সারিতে থাকা বিষয়গুলির নাম সম্বলিত একটি অ্যারে প্রদান করে৷ |
| response.getHeaders() | বর্তমান আউটপুট শিরোনামগুলির একটি অগভীর অনুলিপি প্রদান করে |
| response.hasHeader(name) | নাম দ্বারা চিহ্নিত শিরোনাম বর্তমানে সেট করা থাকলে সত্য প্রদান করে |
| response.removeHeader(name) | পাঠানোর জন্য সারি থেকে হেডার সরিয়ে দেয় |
| response.setHeader(name, value) | শিরোনাম বস্তুর জন্য একটি অনন্য শিরোনাম মান সেট করে |
| response.setTimeout(msecs[, callback]) | সকেটের টাইমআউট মান সেট করে |
| response.uncork() | কর্ক () দ্বারা বাফার করা ডেটা ফ্লাশ করে |
| response.write(chunk[, encoding][, callback]) | প্রতিক্রিয়া শরীরের একটি অংশ পাঠায় |
| response.writeContinue() | ক্লায়েন্টকে একটি HTTP/1.1 100 Continue বার্তা পাঠায় |
| response.writeHead(statusCode[, statusMessage][, headers]) | অনুরোধে একটি প্রতিক্রিয়া শিরোনাম পাঠায় |
| response.writeProcessing() | ক্লায়েন্টকে একটি HTTP/1.1 102 প্রসেসিং বার্তা পাঠায় |
মৌলিক উত্তর উদাহরণ
বিভিন্ন প্রতিক্রিয়া মোড ব্যবহার করে একটি মৌলিক উদাহরণ:
const http = প্রয়োজন('http'); // একটি HTTP সার্ভার তৈরি করুন const সার্ভার = http.createServer((req, res) => { // স্ট্যাটাস কোড এবং বার্তা সেট করুন res.statusCode = 200; res.statusMessage = 'ঠিক আছে'; // হেডার সেট করুন res.setHeader('Content-Type', 'text/html'); res.setHeader('X-Powered-By', 'Node.js'); // প্রতিক্রিয়া তথ্য লগ করুন console.log(`প্রতিক্রিয়া অবস্থা: ${res.statusCode} ${res.statusMessage}`); console.log(`হেডার পাঠানো হয়েছে: ${res.headersSent}`); // writeHead ব্যবহার করে অতিরিক্ত হেডার পাঠান (আগে সেট করা ওভাররাইট করে) res.writeHead(200, { 'কন্টেন্ট-টাইপ': 'টেক্সট/এইচটিএমএল', 'এক্স-কাস্টম-হেডার': 'কাস্টম মান' }); // এখন শিরোনাম পাঠানো হয়েছে কিনা তা পরীক্ষা করুন console.log(`RightHead এর পরে হেডার পাঠানো হয়েছে: ${res.headersSent}`); // অংশে প্রতিক্রিয়া লিখুন res.write('
\n');
res.write('\n');
res.write('Node.js Response Example \n');
res.write('\n');
res.write(' Hello from Node.js!
\n');
res.write(' This response was sent using the ServerResponse object.
\n');
res.write('\n');
res.write(''); // প্রতিক্রিয়া শেষ করুন res.end(); // সমাপ্তির স্থিতি লগ করুন console.log(`প্রতিক্রিয়া শেষ: ${res.finished}`); console.log(`Response writableEnded: ${res.writableEnded}`); console.log(`Response writableFinished: ${res.writableFinished}`); }); // সার্ভার শুরু করুন const PORT = 8080; server.listen(PORT, () => { console.log(`সার্ভার http://localhost:${PORT}/` এ চলছে); });
উত্তর শিরোনাম সেট আপ করা হচ্ছে
উত্তর শিরোনাম সেট করার বিভিন্ন উপায়:
const http = প্রয়োজন('http'); // HTTP সার্ভার তৈরি করুন const সার্ভার = http.createServer((req, res) => { // পদ্ধতি 1: সেটহেডার সহ পৃথক শিরোনাম সেট করুন res.setHeader('Content-Type', 'application/json'); res.setHeader('ক্যাশে-কন্ট্রোল', 'max-age=3600'); res.setHeader('X-কাস্টম-হেডার', 'পদ্ধতি 1'); // একটি হেডার মান পান const contentType = res.getHeader('Content-Type'); console.log(`Content-Type header: ${contentType}`); // একটি শিরোনাম বিদ্যমান কিনা পরীক্ষা করুন console.log(`Cache-Control হেডার আছে: ${res.hasHeader('Cache-Control')}`); // সব হেডারের নাম পান console.log('হেডারের নাম:', res.getHeaderNames()); // অবজেক্ট হিসাবে সমস্ত হেডার পান console.log('সমস্ত হেডার:', res.getHeaders()); // একটি হেডার সরান res.removeHeader('X-কাস্টম-হেডার'); console.log(`অপসারণের পর, X-কাস্টম-হেডার আছে: ${res.hasHeader('X-Custom-Header')}`); // পদ্ধতি 2: রাইটহেড সহ একাধিক শিরোনাম সেট করুন res.writeHead(200, { 'Content-Type': 'application/json', 'এক্স-কাস্টম-হেডার': 'পদ্ধতি 2', 'X-চালিত-দ্বারা': 'Node.js' }); // JSON প্রতিক্রিয়া পাঠান const responseObject = { বার্তা: 'হেডার প্রদর্শন', হেডার: Object.fromEntry( Object.entries(res.getHeaders()) ), headersSent: res.headersSent }; res.end(JSON.stringify(responseObject, null, 2)); }); // সার্ভার শুরু করুন const PORT = 8080; server.listen(PORT, () => { console.log(`সার্ভার http://localhost:${PORT}/` এ চলছে); });
HTTP স্থিতি কোড
বিভিন্ন HTTP স্থিতি কোড সেট করা হচ্ছে:
const http = প্রয়োজন('http'); const url = প্রয়োজন('url'); // একটি HTTP সার্ভার তৈরি করুন যা বিভিন্ন স্ট্যাটাস কোড প্রদর্শন করে const সার্ভার = http.createServer((req, res) => { // অনুরোধের URL পার্স করুন const parsedUrl = url.parse(req.url, true); const path = parsedUrl.pathname; // কন্টেন্ট-টাইপ হেডার সেট করুন res.setHeader('Content-Type', 'text/html'); // বিভিন্ন স্ট্যাটাস কোড সহ বিভিন্ন পাথ পরিচালনা করুন যদি (পথ === '/') { // 200 ঠিক আছে res.writeHead(200, 'OK'); res.end(`HTTP Status Codes Demo
This page demonstrates different HTTP status codes.
- 200 OK (this page)
- 301 Moved Permanently
- 304 Not Modified
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not Found
- 500 Internal Server Error
`);
}
else if (path === '/redirect') {
// 301 Moved Permanently
res.writeHead(301, {
'Location': '/'
});
res.end();
}
else if (path === '/not-modified') {
// 304 Not Modified
res.writeHead(304);
res.end();
}
else if (path === '/bad-request') {
// 400 Bad Request
res.writeHead(400, 'Bad Request');
res.end(`
400 Bad Request
The server could not understand the request due to invalid syntax.
`);
}
else if (path === '/unauthorized') {
// 401 Unauthorized
res.writeHead(401, {
'WWW-Authenticate': 'Basic realm="Access to the site"'
});
res.end(`
401 Unauthorized
Authentication is required but was not provided.
`);
}
else if (path === '/forbidden') {
// 403 Forbidden
res.writeHead(403, 'Forbidden');
res.end(`
403 Forbidden
The server understood the request but refuses to authorize it.
`);
}
else if (path === '/not-found') {
// 404 Not Found
res.writeHead(404, 'Not Found');
res.end(`
404 Not Found
The requested resource could not be found on this server.
`);
}
else if (path === '/server-error') {
// 500 Internal Server Error
res.writeHead(500, 'Internal Server Error');
res.end(`
500 Internal Server Error
The server has encountered a situation it doesn't know how to handle.
`); } অন্য { // ডিফল্ট: 404 পাওয়া যায়নি res.writeHead(404, 'নট ফাউন্ড'); res.end(`404 Not Found
The requested resource could not be found on this server.
`); } }); // সার্ভার শুরু করুন const PORT = 8080; server.listen(PORT, () => { console.log(`সার্ভার http://localhost:${PORT}/` এ চলছে); });
স্ট্রিমিং উত্তর
ডেটা স্ট্রিম করতে রেসপন্স অবজেক্ট ব্যবহার করে:
const http = প্রয়োজন('http'); const fs = প্রয়োজন('fs'); const path = require('path'); // একটি HTTP সার্ভার তৈরি করুন const সার্ভার = http.createServer((req, res) => { const parsedUrl = নতুন URL(req.url, 'http://localhost'); const pathname = parsedUrl.pathname; // বিভিন্ন পাথ হ্যান্ডেল যদি (পথের নাম === '/') { // একটি নিয়মিত প্রতিক্রিয়া পাঠান res.writeHead(200, {'Content-Type': 'text/html'}); res.end(`Streaming Examples
`); } অন্যথায় যদি (পথের নাম === '/স্ট্রিম-টেক্সট') { // একটি বড় পাঠ্য প্রতিক্রিয়া স্ট্রীম করুন res.writeHead(200, {'Content-Type': 'text/plain'}); যাক গণনা = 1; const max = 10; // বিলম্বের সাথে খণ্ডে প্রতিক্রিয়া লিখুন const interval = setInterval(() => { res.write(${count} ডাটার অংশ\n`.রিপিট(20)); যদি (গণনা >= সর্বাধিক) { clearInterval(ব্যবধান); res.end('\nস্ট্রিমিং সম্পূর্ণ!'); } গণনা++; }, 500); // ক্লায়েন্ট সংযোগ বিচ্ছিন্ন হ্যান্ডেল req.on('close', () => { clearInterval(ব্যবধান); console.log('ক্লায়েন্ট বন্ধ সংযোগ'); }); } অন্যথায় যদি (পথের নাম === '/স্ট্রিম-ফাইল') { // একটি নমুনা ফাইল তৈরি করুন const filePath = path.join(__dirname, 'sample-large-file.txt'); যদি (!fs.existsSync(filePath)) { const writeStream = fs.createWriteStream(filePath); জন্য (আলো i = 0; i <10000; i++) { writeStream.write(`লাইন ${i}: এটি স্ট্রিমিং প্রদর্শনের জন্য পাঠ্যের একটি নমুনা লাইন।\n`); } writeStream.end(); } // ফাইলের পরিসংখ্যান পান const stat = fs.statSync(filePath); // হেডার সেট করুন res.writeHead(200, { 'কন্টেন্ট-টাইপ': 'টেক্সট/প্লেইন', 'সামগ্রী-দৈর্ঘ্য': stat.size }); // একটি রিড স্ট্রিম তৈরি করুন এবং প্রতিক্রিয়া পাইপ করুন const fileStream = fs.createReadStream(filePath); fileStream.pipe(res); // ফাইল স্ট্রিম ত্রুটিগুলি পরিচালনা করুন fileStream.on('error', (err) => { console.error(`ত্রুটি স্ট্রিমিং ফাইল: ${err.message}`); res.end('ত্রুটি স্ট্রিমিং ফাইল'); }); // প্রতিক্রিয়া পাঠানোর পরে পরিষ্কার করুন res.on('finish', () => { fs.unlink(filePath, (err) => { if (err) console.error(`নমুনা ফাইল মুছে ফেলার ত্রুটি: ${err.message}`); }); }); } অন্যথায় যদি (পথের নাম === '/stream-json') { // একটি বড় JSON প্রতিক্রিয়া স্ট্রিম করুন res.writeHead(200, {'Content-Type': 'application/json'}); // JSON অ্যারে শুরু করুন res.write('[\n'); যাক গণনা = 0; const max = 100; let isFirst = true; // বিলম্বের সাথে JSON অবজেক্ট লিখুন const interval = setInterval(() => { // প্রথম আইটেম ব্যতীত সবার সাথে একটি কমা যোগ করুন যদি (!প্রথম হয়) { res.write(',\n'); } অন্য { isFirst = মিথ্যা; } // একটি JSON অবজেক্ট তৈরি করুন const obj = { আইডি: গণনা, নাম: `আইটেম ${count}`, টাইমস্ট্যাম্প: নতুন তারিখ().toISOSstring(), ডেটা: `${count}` আইটেমের জন্য নমুনা ডেটা }; // বস্তুটিকে JSON হিসাবে লিখুন res.write(JSON.stringify(obj, null, 2)); যদি (গণনা >= সর্বাধিক) { clearInterval(ব্যবধান); // JSON অ্যারে সম্পূর্ণ করুন res.write('\n]'); res.end(); } গণনা++; }, 100); // ক্লায়েন্ট সংযোগ বিচ্ছিন্ন হ্যান্ডেল req.on('close', () => { clearInterval(ব্যবধান); console.log('JSON স্ট্রিমিংয়ের সময় ক্লায়েন্ট বন্ধ সংযোগ'); }); } অন্য { // অজানা পথ হ্যান্ডেল res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('নট ফাউন্ড'); } }); // সার্ভার শুরু করুন const PORT = 8080; server.listen(PORT, () => { console.log(`স্ট্রিমিং সার্ভার http://localhost:${PORT}/` এ চলছে); });
সারাংশ
জিজিপ বা ডিফ্লেট দিয়ে প্রতিক্রিয়া সংকুচিত করা:
const http = প্রয়োজন('http'); const zlib = require('zlib'); // কম্প্রেশন সহ একটি HTTP সার্ভার তৈরি করুন const সার্ভার = http.createServer((req, res) => { // অ্যাকসেপ্ট-এনকোডিং হেডার পান const acceptEncoding = req.headers['accept-encoding'] || ''; // একটি নমুনা প্রতিক্রিয়া তৈরি করুন (বড় স্ট্রিং) const sampleData = 'এটি একটি নমুনা পাঠ্য যা সংকুচিত হবে। '.পুনরাবৃত্তি(1000); // একটি ফাংশন যা উপযুক্ত শিরোনাম সহ একটি প্রতিক্রিয়া পাঠায় ফাংশন sendResponse (ডেটা, এনকোডিং) { // কম্প্রেশন ব্যবহার করা হলে কন্টেন্ট-এনকোডিং হেডার সেট করুন যদি (এনকোডিং) { res.setHeader('কন্টেন্ট-এনকোডিং', এনকোডিং); } res.setHeader('কন্টেন্ট-টাইপ', 'টেক্সট/প্লেইন'); res.setHeader('Vary', 'Accept-Encoding'); res.writeHead(200); res.end(ডেটা); } // ক্লায়েন্ট কোন এনকোডিং সমর্থন করে তা পরীক্ষা করুন যদি (/\bgzip\b/.test(Encoding স্বীকার)) { // ক্লায়েন্ট gzip সমর্থন করে console.log('gzip কম্প্রেশন ব্যবহার করে'); zlib.gzip(নমুনা ডেটা, (ত্রুটি, সংকুচিত) => { যদি (ভুল) { console.error('Gzip কম্প্রেশন ব্যর্থ হয়েছে:', err); সেন্ড রেসপন্স (নমুনা ডেটা); // অসংকুচিত ফিরে পড়া } অন্য { sendResponse (সংকুচিত, 'gzip'); console.log(`মূল আকার: ${sampleData.length}, সংকুচিত আকার: ${compressed.length}`); console.log(`কম্প্রেশন অনুপাত: ${(compressed.length / sampleData.length * 100).toFixed(2)}%`); } }); } অন্যথায় যদি (/\bdeflate\b/.test(Encoding স্বীকার)) { // ক্লায়েন্ট ডিফ্লেট সমর্থন করে console.log('ডিফ্লেট কম্প্রেশন ব্যবহার করে'); zlib.deflate(sampleData, (err, কম্প্রেসড) => { যদি (ভুল) { console.error('ডিফ্লেট কম্প্রেশন ব্যর্থ হয়েছে:', ত্রুটি); সেন্ড রেসপন্স (নমুনা ডেটা); // অসংকুচিত ফিরে পড়া } অন্য { sendResponse (সংকুচিত, 'deflate'); console.log(`মূল আকার: ${sampleData.length}, সংকুচিত আকার: ${compressed.length}`); console.log(`কম্প্রেশন অনুপাত: ${(compressed.length / sampleData.length * 100).toFixed(2)}%`); } }); } অন্যথায় যদি (/\bbr\b/.test(Encoding স্বীকার)) { // ক্লায়েন্ট Brotli সমর্থন করে (যদি Node.js সংস্করণ দ্বারা সমর্থিত হয়) যদি (typeof zlib.brotliCompress === 'ফাংশন') { console.log('ব্রটলি কম্প্রেশন ব্যবহার করে'); zlib.brotliCompress(sampleData, (err, compressed) => { যদি (ভুল) { console.error('Brotli কম্প্রেশন ব্যর্থ হয়েছে:', err); সেন্ড রেসপন্স (নমুনা ডেটা); // অসংকুচিত ফিরে পড়া } অন্য { sendResponse(সংকুচিত, 'br'); console.log(`মূল আকার: ${sampleData.length}, সংকুচিত আকার: ${compressed.length}`); console.log(`কম্প্রেশন অনুপাত: ${(compressed.length / sampleData.length * 100).toFixed(2)}%`); } }); } অন্য { console.log('Brotli এই Node.js সংস্করণে সমর্থিত নয়'); সেন্ড রেসপন্স (নমুনা ডেটা); // অসংকুচিত ফিরে পড়া } } অন্য { // বিমূর্ততা ক্লায়েন্ট দ্বারা সমর্থিত নয় console.log('কোন কমপ্রেশন ব্যবহার করা হয়নি'); সেন্ড রেসপন্স (নমুনা ডেটা); } }); // সার্ভার শুরু করুন const PORT = 8080; server.listen(PORT, () => { console.log(`কম্প্রেশন সার্ভার http://localhost:${PORT}/` এ চলছে); });