উত্তর:
আপনি যদি এক্সপ্রেস (উচ্চ-কর্মক্ষমতা, নোড.জেএস এর জন্য উচ্চ-শ্রেণীর ওয়েব বিকাশ) ব্যবহার করেন তবে আপনি এটি করতে পারেন:
এইচটিএমএল:
<form method="post" action="/">
<input type="text" name="user[name]">
<input type="text" name="user[email]">
<input type="submit" value="Submit">
</form>
এপিআই ক্লায়েন্ট:
fetch('/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
user: {
name: "John",
email: "john@example.com"
}
})
});
নোড.জেএস: (এক্সপ্রেস v4.16.0 থেকে)
// Parse URL-encoded bodies (as sent by HTML forms)
app.use(express.urlencoded());
// Parse JSON bodies (as sent by API clients)
app.use(express.json());
// Access the parse results as request.body
app.post('/', function(request, response){
console.log(request.body.user.name);
console.log(request.body.user.email);
});
নোড.জেএস: (এক্সপ্রেস <4.16.0 এর জন্য)
const bodyParser = require("body-parser");
/** bodyParser.urlencoded(options)
* Parses the text as URL encoded data (which is how browsers tend to send form data from regular forms set to POST)
* and exposes the resulting object (containing the keys and values) on req.body
*/
app.use(bodyParser.urlencoded({
extended: true
}));
/**bodyParser.json(options)
* Parses the text as JSON and exposes the resulting object on req.body.
*/
app.use(bodyParser.json());
app.post("/", function (req, res) {
console.log(req.body.user.name)
});
app.use(express.bodyParser());
।
আপনি querystring
মডিউলটি ব্যবহার করতে পারেন :
var qs = require('querystring');
function (request, response) {
if (request.method == 'POST') {
var body = '';
request.on('data', function (data) {
body += data;
// Too much POST data, kill the connection!
// 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
if (body.length > 1e6)
request.connection.destroy();
});
request.on('end', function () {
var post = qs.parse(body);
// use post['blah'], etc.
});
}
}
এখন, উদাহরণস্বরূপ, যদি আপনার input
নামের সাথে কোনও ক্ষেত্র থাকে age
, আপনি ভেরিয়েবলটি ব্যবহার করে এটি অ্যাক্সেস করতে পারেন post
:
console.log(post.age);
var POST = qs.parse(body); // use POST
কেবলমাত্র আমার মতো নুবসের জন্য: যখন ইনপুট পাঠ্য ক্ষেত্রের নাম "ব্যবহারকারী" হয়, তখন Post.user
সেই ক্ষেত্রটির ডেটা প্রদর্শিত হবে। যেমনconsole.log(Post.user);
readable
বডি স্ট্রিংয়ে ডেটা তৈরির পরিবর্তে কলব্যাকও ব্যবহার করতে পারেন । একবার এটিকে বহিস্কার করা হলে, দেহটি পাওয়া যায়request.read();
req.connection.destroy();
কলব্যাকগুলি কার্যকর হতে বাধা দেয় না! উদাহরণস্বরূপ, "অন এন্ড" কলব্যাক কেটে যাওয়া শরীরের সাথে কার্যকর করা হবে! এটি সম্ভবত আপনি যা চান তা নয় ...
যদি কেউ আপনার র্যাম বন্যার চেষ্টা করে তবে সংযোগটি নিশ্চিত করে ফেলুন!
var qs = require('querystring');
function (request, response) {
if (request.method == 'POST') {
var body = '';
request.on('data', function (data) {
body += data;
// 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
if (body.length > 1e6) {
// FLOOD ATTACK OR FAULTY CLIENT, NUKE REQUEST
request.connection.destroy();
}
});
request.on('end', function () {
var POST = qs.parse(body);
// use POST
});
}
}
var POST = qs.parse(body); // use POST
কেবল নুবসের জন্য: যখন ইনপুট পাঠ্যের ক্ষেত্রের নাম "ব্যবহারকারী" হয়, পোস্ট.ইউজারটি সেই ক্ষেত্রের ডেটা প্রদর্শন করবে। যেমন কনসোল.লগ (Post.user);
এখানে প্রচুর উত্তরগুলি এখন আর ভাল অভ্যাস নয় বা কোনও ব্যাখ্যা দেয় না, তাই এই কারণেই আমি এটি লিখছি।
যখন http.createServer এর কলব্যাক বলা হয়, যখন সার্ভারটি অনুরোধের জন্য প্রকৃতপক্ষে সমস্ত শিরোনাম পেয়ে থাকে, তবে এটি সম্ভবত সম্ভব যে ডেটা এখনও প্রাপ্ত হয়নি, সুতরাং আমাদের এটির জন্য অপেক্ষা করতে হবে। HTTP অনুরোধ বস্তু (একটি http.IncomingMessage উদাহরণস্বরূপ) আসলে একটি হয় পাঠযোগ্য প্রবাহ । পাঠযোগ্য স্ট্রিমগুলিতে যখনই প্রচুর ডেটা আসে, একটি ইভেন্ট নির্গত হয় (ধরে নেওয়া যায় আপনি এটিতে একটি কলব্যাক নিবন্ধিত করেছেন) এবং যখন সমস্ত অংশ এসে পৌঁছেছে তখন একটি ইভেন্ট নির্গত হয়। আপনি কীভাবে ইভেন্টগুলি শোনেন তার একটি উদাহরণ এখানে:data
end
http.createServer((request, response) => {
console.log('Now we have a http message with headers but no data yet.');
request.on('data', chunk => {
console.log('A chunk of data has arrived: ', chunk);
});
request.on('end', () => {
console.log('No more data');
})
}).listen(8080)
আপনি যদি এটি চেষ্টা করে দেখেন যে খণ্ডগুলি হল বাফার । আপনি যদি বাইনারি ডেটা নিয়ে কাজ না করে থাকেন এবং তার পরিবর্তে স্ট্রিংয়ের সাথে কাজ করার প্রয়োজন হয় তবে আমি অনুরোধ করব অনুরোধ করুন।সেট এনকোডিং পদ্ধতিটি যা প্রদত্ত এনকোডিংয়ের সাথে ব্যাখ্যা করে স্ট্রিমের নির্গত স্ট্রিংগুলির কারণ করে এবং বহু-বাইট অক্ষরকে সঠিকভাবে পরিচালনা করে।
এখন আপনি সম্ভবত প্রতিটি অংশের নিজস্ব দ্বারা আগ্রহী নন, তাই এই ক্ষেত্রে সম্ভবত আপনি এটি এটিকে বাফার করতে চান:
http.createServer((request, response) => {
const chunks = [];
request.on('data', chunk => chunks.push(chunk));
request.on('end', () => {
const data = Buffer.concat(chunks);
console.log('Data: ', data);
})
}).listen(8080)
এখানে বাফারকনক্যাট ব্যবহার করা হয়, যা কেবলমাত্র সমস্ত বাফারকে একত্রিত করে এবং একটি বড় বাফার ফিরিয়ে দেয়। আপনি কনক্যাট-স্ট্রিম মডিউলও ব্যবহার করতে পারেন যা একই কাজ করে:
const http = require('http');
const concat = require('concat-stream');
http.createServer((request, response) => {
concat(request, data => {
console.log('Data: ', data);
});
}).listen(8080)
আপনি HTML কোন ফাইল বা হস্তান্তর সহ একটি পোস্ট জমা ফর্ম গ্রহণ করার চেষ্টা করছেন যদি jQuery এর Ajax ডিফল্ট বিষয়বস্তুর প্রকার কল, তারপর বিষয়বস্তুর প্রকার হয় application/x-www-form-urlencoded
সঙ্গে uft-8
এনকোডিং। আপনি এটিকে ডি-সিরিয়ালাইজ করতে এবং বৈশিষ্ট্যগুলি অ্যাক্সেস করতে ক্যোরিস্ট্রিং মডিউলটি ব্যবহার করতে পারেন :
const http = require('http');
const concat = require('concat-stream');
const qs = require('querystring');
http.createServer((request, response) => {
concat(request, buffer => {
const data = qs.parse(buffer.toString());
console.log('Data: ', data);
});
}).listen(8080)
যদি আপনার বিষয়বস্তুর প্রকার তাদেরকে JSON পরিবর্তে, আপনি কেবল ব্যবহার করতে পারেন JSON.parse পরিবর্তে qs.parse ।
আপনি যদি ফাইলগুলি নিয়ে কাজ করছেন বা মাল্টিপার্ট বিষয়বস্তুর ধরণের হ্যান্ডল করছেন, তবে সেক্ষেত্রে আপনার ভীষণরকম কিছু ব্যবহার করা উচিত যা এটির সাথে আচরণ থেকে সমস্ত ব্যথা সরিয়ে দেয়। আমার এই অন্যান্য উত্তরটি একবার দেখুন যেখানে আমি মাল্টিপার্ট সামগ্রীর জন্য সহায়ক লিঙ্ক এবং মডিউল পোস্ট করেছি।
আপনি যদি সামগ্রীটি বিশ্লেষণ করতে না চান তবে এটি অন্য কোথাও প্রেরণ করতে চান না, উদাহরণস্বরূপ এটি অন্য একটি HTTP অনুরোধ হিসাবে ডেটা হিসাবে প্রেরণ করুন বা কোনও ফাইলে সংরক্ষণ করুন আমি এটি বাফারিংয়ের পরিবর্তে পাইপিংয়ের পরামর্শ দিচ্ছি , কারণ এটি কম হবে'll কোড, পিঠে চাপ ভাল পরিচালনা করে, এটি কম মেমরি এবং কিছু ক্ষেত্রে দ্রুত গ্রহণ করবে take
সুতরাং আপনি যদি কোনও ফাইলে বিষয়বস্তু সংরক্ষণ করতে চান:
http.createServer((request, response) => {
request.pipe(fs.createWriteStream('./request'));
}).listen(8080)
অন্যান্য উত্তরের হিসাবে আমার মনে রাখা হয়েছে যে দূষিত ক্লায়েন্টরা আপনাকে আপনার অ্যাপ্লিকেশনটি ক্র্যাশ করতে বা আপনার স্মৃতি পূরণ করতে বিপুল পরিমাণ ডেটা প্রেরণ করতে পারে যাতে সুরক্ষা রাখতে যাতে কোনও নির্দিষ্ট সীমা অতিক্রম করে এমন ডেটা নির্গত করে এমন অনুরোধগুলি আপনি ফেলে দেন তা নিশ্চিত করে। যদি আপনি আগত ডেটাগুলি পরিচালনা করতে কোনও গ্রন্থাগার ব্যবহার না করেন। আমি স্ট্রিম-মিটারের মতো এমন কিছু ব্যবহার করার পরামর্শ দেব যা নির্দিষ্ট সীমাতে পৌঁছে গেলে অনুরোধটি বাতিল করতে পারে:
limitedStream = request.pipe(meter(1e7));
limitedStream.on('data', ...);
limitedStream.on('end', ...);
অথবা
request.pipe(meter(1e7)).pipe(createWriteStream(...));
অথবা
concat(request.pipe(meter(1e7)), ...);
আপনি কীভাবে এইচটিটিপি রিকোয়েস্ট বডিটি ব্যবহার করতে পারবেন তার উপরে আমি বর্ণনা করেছি, তবে কেবল কন্টেন্টটি বাফারিং এবং পার্স করার জন্য, আমি পরামর্শ দিচ্ছি যে এগুলি মডিউলগুলির পরিবর্তে আপনার নিজের উপর প্রয়োগ করা হবে কারণ তারা সম্ভবত প্রান্তের কেসগুলি আরও ভাল পরিচালনা করবে। এক্সপ্রেসের জন্য আমি বডি পার্সার ব্যবহার করার পরামর্শ দিই । কোয়ার জন্য, একই ধরণের মডিউল রয়েছে ।
আপনি যদি কোনও কাঠামো ব্যবহার না করেন তবে শরীরটি বেশ ভাল।
request
আবার ব্যবহার করা হয়েছে এবং request.on('end')
একাধিকবার আহ্বান করা যেতে পারে? আমি কীভাবে এড়াতে পারি?
request.on('end', ...)
হবে।
এখানে পোস্ট করা অন্যান্য উত্তর এবং নিবন্ধগুলির উপর ভিত্তি করে একটি খুব সাধারণ নং-ফ্রেমওয়ার্ক র্যাপার:
var http = require('http');
var querystring = require('querystring');
function processPost(request, response, callback) {
var queryData = "";
if(typeof callback !== 'function') return null;
if(request.method == 'POST') {
request.on('data', function(data) {
queryData += data;
if(queryData.length > 1e6) {
queryData = "";
response.writeHead(413, {'Content-Type': 'text/plain'}).end();
request.connection.destroy();
}
});
request.on('end', function() {
request.post = querystring.parse(queryData);
callback();
});
} else {
response.writeHead(405, {'Content-Type': 'text/plain'});
response.end();
}
}
ব্যবহারের উদাহরণ:
http.createServer(function(request, response) {
if(request.method == 'POST') {
processPost(request, response, function() {
console.log(request.post);
// Use request.post here
response.writeHead(200, "OK", {'Content-Type': 'text/plain'});
response.end();
});
} else {
response.writeHead(200, "OK", {'Content-Type': 'text/plain'});
response.end();
}
}).listen(8000);
response.post
আরও যুক্তিযুক্ত হওয়ার চেয়ে বেশি হওয়ার কারণ নেই request.post
। আমি পোস্ট আপডেট।
আপনি যদি JSON এ আপনার ডেটা এনকোড করে থাকেন তবে এটি পরিষ্কার হয়ে যাবে , তবে নোড.জেএস এ প্রেরণ করুন
function (req, res) {
if (req.method == 'POST') {
var jsonString = '';
req.on('data', function (data) {
jsonString += data;
});
req.on('end', function () {
console.log(JSON.parse(jsonString));
});
}
}
qs.parse()
, JSON.parse()
শরীরকে ব্যবহারযোগ্য কিছুতে পরিণত করে। উদাহরণ:, var post = JSON.parse(body);
তারপরে ডেটা অ্যাক্সেস করুন post.fieldname
। (গল্পটির নৈতিকতা, আপনি যা দেখছেন সে সম্পর্কে যদি আপনি বিভ্রান্ত হন তবে ভুলে যাবেন না typeof
!)
request.setEncoding
এই কাজটি সঠিকভাবে করার জন্য ব্যবহার করা উচিত অন্যথায় এটি অসি অক্ষরগুলি সঠিকভাবে পরিচালনা করতে পারে না।
যে কোনও ওয়েব ফ্রেমওয়ার্ক ইনস্টল না করে কীভাবে এই তুচ্ছ কাজটি করবেন তা ভাবছেন আমি একসাথে এটিকে পরিচালনা করতে সক্ষম হয়েছি। খুব সম্ভবত উত্পাদন প্রস্তুত কিন্তু এটি কাজ করে বলে মনে হচ্ছে।
function handler(req, res) {
var POST = {};
if (req.method == 'POST') {
req.on('data', function(data) {
data = data.toString();
data = data.split('&');
for (var i = 0; i < data.length; i++) {
var _data = data[i].split("=");
POST[_data[0]] = _data[1];
}
console.log(POST);
})
}
}
আপনি ব্যবহার করতে পারেন body-parser
, নোড.জেএস বডি পার্সিং মিডওয়্যার।
প্রথম বোঝা body-parser
$ npm install body-parser --save
কিছু উদাহরণ কোড
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(function (req, res) {
var post_data = req.body;
console.log(post_data);
})
তথ্যসূত্র: https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// at this point, `body` has the entire request body stored in it as a string
});
আপনি যদি নোড-মজবুত ব্যবহার করেন তবে আপনি এটি কীভাবে করতে পারেন তা এখানে :
var formidable = require("formidable");
var form = new formidable.IncomingForm();
form.parse(request, function (err, fields) {
console.log(fields.parameter1);
console.log(fields.parameter2);
// ...
});
আপনি যদি খাঁটি নোড.জেএস ব্যবহার করতে পছন্দ করেন তবে আপনি নীচের মত পোষ্ট ডেটা বের করতে পারেন:
// Dependencies
const StringDecoder = require('string_decoder').StringDecoder;
const http = require('http');
// Instantiate the HTTP server.
const httpServer = http.createServer((request, response) => {
// Get the payload, if any.
const decoder = new StringDecoder('utf-8');
let payload = '';
request.on('data', (data) => {
payload += decoder.write(data);
});
request.on('end', () => {
payload += decoder.end();
// Parse payload to object.
payload = JSON.parse(payload);
// Do smoething with the payload....
});
};
// Start the HTTP server.
const port = 3000;
httpServer.listen(port, () => {
console.log(`The server is listening on port ${port}`);
});
1) 'body-parser'
এনপিএম থেকে ইনস্টল করুন ।
2) তারপরে আপনার app.ts এ
var bodyParser = require('body-parser');
3) তারপরে আপনার লিখতে হবে
app.use(bodyParser.json())
মধ্যে app.ts মডিউল
4) মনে রাখবেন যে আপনি অন্তর্ভুক্ত
app.use(bodyParser.json())
শীর্ষে বা কোনও মডিউল ঘোষণার আগে।
উদা:
app.use(bodyParser.json())
app.use('/user',user);
5) তারপরে ব্যবহার করুন
var postdata = req.body;
যদি আপনি data
কলব্যাকের সাথে আপনার ডেটা একসাথে না করতে চান তবে আপনি সর্বদা এইভাবে readable
কলব্যাক ব্যবহার করতে পারেন :
// Read Body when Available
request.on("readable", function(){
request.body = '';
while (null !== (request.body += request.read())){}
});
// Do something with it
request.on("end", function(){
request.body //-> POST Parameters as String
});
এই পদ্ধতিটি আগত অনুরোধটিকে পরিবর্তন করে, তবে আপনি আপনার প্রতিক্রিয়া শেষ করার সাথে সাথে অনুরোধটি আবর্জনা সংগ্রহ করা হবে, যাতে কোনও সমস্যা না হয়।
আপনি যদি বিশাল দেহকে ভয় পান তবে প্রথমে শরীরের আকার পরীক্ষা করা একটি উন্নত পদ্ধতির উপায়।
request
একটি সাধারণ নোড.জেএস স্ট্রিম, যাতে আপনি request.headers
শরীরের দৈর্ঘ্য পরীক্ষা করতে পারেন এবং প্রয়োজনে অনুরোধটি বাতিল করতে পারেন।
এটি করার একাধিক উপায় রয়েছে। তবে, আমি জানি দ্রুততম উপায় হ'ল এক্সপ্রেস.জেএস লাইব্রেরিটি বডি পার্সার সহ ব্যবহার করা।
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
app.use(bodyParser.urlencoded({extended : true}));
app.post("/pathpostdataissentto", function(request, response) {
console.log(request.body);
//Or
console.log(request.body.fieldName);
});
app.listen(8080);
এটি স্ট্রিংয়ের জন্য কাজ করতে পারে তবে পোস্টের ডেটাতে জেএসএন অ্যারে থাকলে আমি তার পরিবর্তে বডি পার্সার.উরলিনকোডটি বডি পার্সার.জসনে পরিবর্তন করব।
আরও তথ্য: http://www.kompulsa.com/how-to-accept-and-parse-post-requests-in-node-js/
আপনাকে POST
ব্যবহার করে খণ্ডে ডেটা গ্রহণ করতে হবেrequest.on('data', function(chunk) {...})
const http = require('http');
http.createServer((req, res) => {
if (req.method == 'POST') {
whole = ''
req.on('data', (chunk) => {
# consider adding size limit here
whole += chunk.toString()
})
req.on('end', () => {
console.log(whole)
res.writeHead(200, 'OK', {'Content-Type': 'text/html'})
res.end('Data received.')
})
}
}).listen(8080)
আপনার প্রস্তাবিত স্থানে একটি আকার সীমা যুক্ত করার কথা বিবেচনা করা উচিত ।
setTimeout
পুরো উইন্ডোটি যদি সেই উইন্ডোর মধ্যে না পাওয়া যায় তবে নির্দিষ্ট সময়ের পরে সংযোগ শেষ করে এমনটি দিয়ে এটি প্রতিরোধ করা যেতে পারে ।
আপনি যদি এক্সপ্রেস.জেএস ব্যবহার করে থাকেন, আপনি রেইকি.এডিতে অ্যাক্সেস করার আগে, আপনাকে অবশ্যই মিডলওয়্যার বডি পার্সার যুক্ত করতে হবে:
app.use(express.bodyParser());
তাহলে আপনি চাইতে পারেন
req.body.user
এবং যদি আপনি এক্সপ্রেসের মতো পুরো কাঠামোটি ব্যবহার করতে না চান তবে আপনার আপলোড সহ বিভিন্ন ধরণের ফর্মগুলির প্রয়োজন হয় তবে ফর্মালাইনটি একটি ভাল পছন্দ হতে পারে।
এটি নোড.জেএস মডিউলগুলিতে তালিকাভুক্ত
আমি একটি ভিডিও পেয়েছি যা এটি কীভাবে অর্জন করতে হবে তার ব্যাখ্যা করে: https://www.youtube.com/watch?v=nuw48-u3Yrg
এটি "ক্যোরিস্ট্রিং" এবং "স্ট্রিংবিল্ডার" মডিউলগুলির সাথে একসাথে ডিফল্ট "HTTP" মডিউল ব্যবহার করে। অ্যাপ্লিকেশনটি একটি ওয়েব পৃষ্ঠা থেকে দুটি সংখ্যা (দুটি পাঠ্যবক্স ব্যবহার করে) নেয় এবং জমা দেওয়ার পরে, এই দুটিটির যোগফল দেয় (পাঠ্য বাক্সগুলিতে মানগুলি বজায় রাখার পাশাপাশি)। এটি আমি যে কোনও জায়গায় খুঁজে পেতে পারি এটি সেরা উদাহরণ।
সম্পর্কিত উত্স কোড:
var http = require("http");
var qs = require("querystring");
var StringBuilder = require("stringbuilder");
var port = 9000;
function getCalcHtml(req, resp, data) {
var sb = new StringBuilder({ newline: "\r\n" });
sb.appendLine("<html>");
sb.appendLine(" <body>");
sb.appendLine(" <form method='post'>");
sb.appendLine(" <table>");
sb.appendLine(" <tr>");
sb.appendLine(" <td>Enter First No: </td>");
if (data && data.txtFirstNo) {
sb.appendLine(" <td><input type='text' id='txtFirstNo' name='txtFirstNo' value='{0}'/></td>", data.txtFirstNo);
}
else {
sb.appendLine(" <td><input type='text' id='txtFirstNo' name='txtFirstNo' /></td>");
}
sb.appendLine(" </tr>");
sb.appendLine(" <tr>");
sb.appendLine(" <td>Enter Second No: </td>");
if (data && data.txtSecondNo) {
sb.appendLine(" <td><input type='text' id='txtSecondNo' name='txtSecondNo' value='{0}'/></td>", data.txtSecondNo);
}
else {
sb.appendLine(" <td><input type='text' id='txtSecondNo' name='txtSecondNo' /></td>");
}
sb.appendLine(" </tr>");
sb.appendLine(" <tr>");
sb.appendLine(" <td><input type='submit' value='Calculate' /></td>");
sb.appendLine(" </tr>");
if (data && data.txtFirstNo && data.txtSecondNo) {
var sum = parseInt(data.txtFirstNo) + parseInt(data.txtSecondNo);
sb.appendLine(" <tr>");
sb.appendLine(" <td>Sum: {0}</td>", sum);
sb.appendLine(" </tr>");
}
sb.appendLine(" </table>");
sb.appendLine(" </form>")
sb.appendLine(" </body>");
sb.appendLine("</html>");
sb.build(function (err, result) {
resp.write(result);
resp.end();
});
}
function getCalcForm(req, resp, data) {
resp.writeHead(200, { "Content-Type": "text/html" });
getCalcHtml(req, resp, data);
}
function getHome(req, resp) {
resp.writeHead(200, { "Content-Type": "text/html" });
resp.write("<html><html><head><title>Home</title></head><body>Want to some calculation? Click <a href='/calc'>here</a></body></html>");
resp.end();
}
function get404(req, resp) {
resp.writeHead(404, "Resource Not Found", { "Content-Type": "text/html" });
resp.write("<html><html><head><title>404</title></head><body>404: Resource not found. Go to <a href='/'>Home</a></body></html>");
resp.end();
}
function get405(req, resp) {
resp.writeHead(405, "Method not supported", { "Content-Type": "text/html" });
resp.write("<html><html><head><title>405</title></head><body>405: Method not supported</body></html>");
resp.end();
}
http.createServer(function (req, resp) {
switch (req.method) {
case "GET":
if (req.url === "/") {
getHome(req, resp);
}
else if (req.url === "/calc") {
getCalcForm(req, resp);
}
else {
get404(req, resp);
}
break;
case "POST":
if (req.url === "/calc") {
var reqBody = '';
req.on('data', function (data) {
reqBody += data;
if (reqBody.length > 1e7) { //10MB
resp.writeHead(413, 'Request Entity Too Large', { 'Content-Type': 'text/html' });
resp.end('<!doctype html><html><head><title>413</title></head><body>413: Request Entity Too Large</body></html>');
}
});
req.on('end', function () {
var formData = qs.parse(reqBody);
getCalcForm(req, resp, formData);
});
}
else {
get404(req, resp);
}
break;
default:
get405(req, resp);
break;
}
}).listen(port);
যারা কাঁচা বাইনারি পোষ্ট ব্যবহার করছেন তাদের ওভারহেড এনকোডিং ছাড়াই আপলোড করতে পারেন:
ক্লায়েন্ট:
var xhr = new XMLHttpRequest();
xhr.open("POST", "/api/upload", true);
var blob = new Uint8Array([65,72,79,74]); // or e.g. recorder.getBlob()
xhr.send(blob);
সার্ভার:
var express = require('express');
var router = express.Router();
var fs = require('fs');
router.use (function(req, res, next) {
var data='';
req.setEncoding('binary');
req.on('data', function(chunk) {
data += chunk;
});
req.on('end', function() {
req.body = data;
next();
});
});
router.post('/api/upload', function(req, res, next) {
fs.writeFile("binaryFile.png", req.body, 'binary', function(err) {
res.send("Binary POST successful!");
});
});
আপনি এক্সপ্রেস মিডলওয়্যারটি ব্যবহার করতে পারেন , এতে এখন বডি পার্সার অন্তর্নির্মিত রয়েছে। এর অর্থ আপনাকে যা করতে হবে তা হ'ল:
import express from 'express'
const app = express()
app.use(express.json())
app.post('/thing', (req, res) => {
console.log(req.body) // <-- this will access the body of the post
res.sendStatus(200)
})
কোড কোডটি এক্সপ্রেস 4.16.x সহ ES6
আপনি এক্সপ্রেস ব্যবহার না করে পোস্ট প্যারামিটার বের করতে পারেন।
1: nmp install multiparty
2: মাল্টিপার্টি আমদানি করুন। যেমনvar multiparty = require('multiparty');
3: `
if(req.method ==='POST'){
var form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
console.log(fields['userfile1'][0]);
});
}
4: এবং এইচটিএমএল ফর্ম IS।
<form method=POST enctype=multipart/form-data>
<input type=text name=userfile1><br>
<input type=submit>
</form>
আমি আশা করি এটি আপনার পক্ষে কাজ করবে। ধন্যবাদ।
আপনার নোড অ্যাপ্লিকেশনটিকে বন্যার এড়ানোর জন্য POST আকার সীমাবদ্ধ করুন। একটি দুর্দান্ত কাঁচা বডি মডিউল রয়েছে, যা এক্সপ্রেস এবং সংযোগ উভয়ের জন্যই উপযুক্ত, যা আপনাকে আকার এবং দৈর্ঘ্যের দ্বারা অনুরোধ সীমাবদ্ধ করতে সহায়তা করতে পারে।
এটিতে কোনও ফাইল আপলোড জড়িত থাকলে ব্রাউজারটি সাধারণত এটি একটি "multipart/form-data"
সামগ্রী-প্রকার হিসাবে প্রেরণ করে । আপনি এ জাতীয় ক্ষেত্রে এটি ব্যবহার করতে পারেন
var multipart = require('multipart');
multipart.parse(req)
এই মত ফর্ম ক্ষেত্রে
<input type="text" name="user[name]" value="MyName">
<input type="text" name="user[email]" value="myemail@somewherefarfar.com">
উপরের উত্তরগুলির মধ্যে কিছু ব্যর্থ হবে কারণ তারা কেবল ফ্ল্যাট ডেটা সমর্থন করে।
এখন আমি ক্যাসি চু উত্তর ব্যবহার করছি কিন্তু সঙ্গে "QS" পরিবর্তে "querystring" মডিউল। এটি "বডি পার্সার" মডিউলটিও ব্যবহার করে। সুতরাং যদি আপনি নেস্টেড ডেটা চান তবে আপনাকে কিউএস ইনস্টল করতে হবে।
npm install qs --save
তারপরে প্রথম লাইনটি প্রতিস্থাপন করুন:
//var qs = require('querystring');
var qs = require('qs');
function (request, response) {
if (request.method == 'POST') {
var body = '';
request.on('data', function (data) {
body += data;
// Too much POST data, kill the connection!
// 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
if (body.length > 1e6)
request.connection.destroy();
});
request.on('end', function () {
var post = qs.parse(body);
console.log(post.user.name); // should work
// use post['blah'], etc.
});
}
}
আপনি "অনুরোধ - সরলীকৃত এইচটিটিপি ক্লায়েন্ট" এবং জাভাস্ক্রিপ্ট প্রতিশ্রুতি ব্যবহার করে সহজেই পোস্টের অনুরোধের প্রতিক্রিয়া প্রেরণ এবং পেতে পারেন।
var request = require('request');
function getData() {
var options = {
url: 'https://example.com',
headers: {
'Content-Type': 'application/json'
}
};
return new Promise(function (resolve, reject) {
var responseData;
var req = request.post(options, (err, res, body) => {
if (err) {
console.log(err);
reject(err);
} else {
console.log("Responce Data", JSON.parse(body));
responseData = body;
resolve(responseData);
}
});
});
}
আপনার যদি ফর্ম ডেটাটি রেইক.হে উপলব্ধ থাকে তবে আপনাকে বডি পার্সার () ব্যবহার করতে হবে। বডি পার্সার আপনার অনুরোধটিকে পার্স করে এবং এটিকে এমন ফর্ম্যাটে রূপান্তর করে যা থেকে আপনি সহজেই আপনার প্রয়োজনীয় প্রাসঙ্গিক তথ্য বের করতে পারেন।
উদাহরণস্বরূপ, আসুন ধরা যাক আপনার সীমান্তে আপনার সাইন আপ ফর্ম রয়েছে। আপনি এটি পূরণ করছেন এবং কোথাও বিশদটি সংরক্ষণ করার জন্য সার্ভারকে অনুরোধ করছেন।
আপনার অনুরোধ থেকে ব্যবহারকারীর নাম এবং পাসওয়ার্ড উত্তোলন নীচের মতই সহজ হয় যদি আপনি বডি পার্সার ব্যবহার করেন।
............................................................।
var loginDetails = {
username : request.body.username,
password : request.body.password
};
মিডলওয়ার ছাড়া একটি লাইন
আপনি নীচের ডেটা পোস্ট করলে আপনি 'name':'ABC'
নীচের একটি লাইনার ব্যবহার করে পার্স করতে পারেন,
require('url').parse(req.url, true).query.name