از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
دریافت HTTP POST Body در Express.js در این مقاله مختصر به روش استخراج اطلاعات از بدنه POST در Express.js خواهیم پرداخت. پروتکل HTTP راه های مختلفی را برای انتقال اطلاعات از یک کلاینت به یک سرور ارائه می دهد که بدنه های POST انعطاف پذیرترین و متداول ترین روش برای ارسال …
سرفصلهای مطلب
معرفی
در این مقاله مختصر به روش استخراج اطلاعات از بدنه POST در Express.js خواهیم پرداخت. پروتکل HTTP راه های مختلفی را برای انتقال اطلاعات از یک کلاینت به یک سرور ارائه می دهد که بدنه های POST انعطاف پذیرترین و رایج ترین روش برای ارسال داده ها از طریق HTTP هستند.
روش دیگری که معمولاً برای موارد مختلف استفاده می شود، انتقال اطلاعات با استفاده از رشته های پرس و جو یا پارامترهای URL است. برای اطلاعات بیشتر، روش دریافت رشتهها و پارامترهای query را در Express.js بررسی کنید.
برای این مقاله فرض میکنم که تجربهای با Node.js و ایجاد ساده دارید Express.js سرورها
ارسال داده های POST در HTTP
داده ها را می توان از طریق تماس HTTP POST به دلایل زیادی ارسال کرد که برخی از رایج ترین آنها از طریق HTML است. <form>
یا یک درخواست API. داده ها می توانند بگیرند روی چند شکل مختلف که رایج ترین آنها عبارتند از:
application/x-www-form-urlencoded
: دادهها در این رمزگذاری مانند یک رشته پرس و جو که در یک URL میبینید قالببندی میشوند، با کلید-مقدار paris که با آن جدا میشود.&
شخصیت ها. مثلا:foo=bar&abc=123&stack=abuse
. این کدگذاری پیش فرض است.multipart/form-data
: این رمزگذاری معمولا برای ارسال فایل استفاده می شود. به طور خلاصه، هر کلید-مقدار در یک درخواست ارسال میشود، اما «قسمتهای» متفاوتی که با «مرزها» از هم جدا شدهاند و متا دادههای بیشتری را شامل میشوند.text/plain
: این داده ها فقط به صورت متن ساده بدون ساختار ارسال می شوند و معمولاً استفاده نمی شوند.
یک درخواست HTTP POST خام با application/x-www-form-urlencoded
رمزگذاری ممکن است چیزی شبیه به این باشد:
POST /signup HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 53
username=scott&password=secret&website=rasanegar.com
استخراج داده های POST
قبل از اینکه بتوانیم فوراً دسترسی به داده های POST را شروع کنیم، باید برنامه Express خود را به درستی پیکربندی کنیم. این پیکربندی باید انجام شود زیرا همه سرورهای برنامه وب نیازی به تجزیه بدن ندارند و اینکه تجزیه بدنی چه چیزی فعال باشد بستگی دارد روی درخواست شما
برای تنظیم این، ما از آن استفاده خواهیم کرد تجزیه کننده بدن بسته ای که می تواند انواع مختلفی از داده ها را مدیریت کند. این بسته یک میان افزار که بدنه خام را رهگیری می کند و آن را به شکلی تجزیه می کند که کد برنامه شما به راحتی می تواند از آن استفاده کند.
// index.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/post-test', (req, res) => {
console.log('Got body:', req.body);
res.sendStatus(200);
});
app.listen(8080, () => console.log(`Started server at http://localhost:8080!`));
به روش تماس ما توجه کنید app.use(...)
قبل از تعیین مسیر ما ترتیب در اینجا مهم است. این تضمین خواهد کرد که body-parser
قبل از مسیر ما اجرا می شود، که تضمین می کند که مسیر ما می تواند سپس به بدنه HTTP POST تجزیه شده دسترسی پیدا کند.
برای آزمایش این، ابتدا برنامه Express را راه اندازی می کنیم و سپس از آن استفاده می کنیم curl
ابزار در یک متفاوت است console پنجره:
$ curl -d "username=scott&password=secret&website=rasanegar.com" -X POST http://localhost:8080/post-test
OK
$ node index.js
Started server at http://localhost:8080!
Got body: { username: 'scott',
password: 'secret',
website: 'rasanegar.com' }
در اینجا می توانید ببینید که داده های رشته پرس و جو در یک شی جاوا اسکریپت تجزیه شده است که ما به راحتی می توانیم به آن دسترسی داشته باشیم.
نکته مهم دیگری که باید به آن توجه داشت استفاده ما از آن است extended
گزینه هنگام تماس bodyParser.urlencoded
. با استفاده از extended
گزینه می گوید body-parser
برای استفاده از qs
کتابخانه برای تجزیه داده های رمزگذاری شده با URL. این اجازه می دهد تا چیزهایی مانند اشیا و آرایه ها در قالب کدگذاری شده با URL کدگذاری شوند.
و در حالی که urlencoded
یکی از پرکاربردترین تجزیه کننده هایی است که body-parser
فراهم می کند، می توانید از موارد زیر نیز استفاده کنید:
.json()
: متن با فرمت JSON را برای بدنه ها با a تجزیه می کندContent-Type
ازapplication/json
..raw()
: بدنه HTTP را به a تجزیه می کندBuffer
برای سفارشی مشخص شدهContent-Type
s، اگرچه پیش فرض پذیرفته شده استContent-Type
استapplication/octet-stream
..text()
: اجسام HTTP را با a تجزیه می کندContent-Type
ازtext/plain
، که آن را به صورت یک رشته ساده برمی گرداند.
هر یک از این تجزیه کننده ها همچنین از تورم خودکار داده های کدگذاری شده با آن پشتیبانی می کند gzip یا باد کردن، بنابراین فشرده سازی همچنان می تواند به صورت شفاف و بدون هیچ کار اضافی توسط کد برنامه شما استفاده شود.
نکته جالب در مورد مدل میانافزار و روش تجزیه این بسته دادهها این است که شما فقط به استفاده از یک تجزیهگر گیر نمیدهید. می توانید یکی را فعال کنید یا بیشتر تجزیه کننده های برنامه شما برای اطمینان از اینکه همه انواع داده ها به درستی پردازش می شوند:
// index.js
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(bodyParser.raw());
// ...
بنابراین اکنون اگر بخواهیم یک درخواست HTTP POST با JSON به عنوان بدنه ارسال کنیم، به یک شیء معمولی JSON در req.body
ویژگی:
POST /post-test HTTP/1.1
Host: localhost:8080
Content-Type: application/json
Content-Length: 69
'{"username":"scott","password":"secret","website":"rasanegar.com"}'
$ node index.js
Started server at http://localhost:8080!
Got body: { username: 'scott',
password: 'secret',
website: 'rasanegar.com' }
نتیجه
رایج ترین راه برای ارسال مقادیر متنوع و زیاد داده از طریق HTTP استفاده از روش POST است. قبل از اینکه بتوانیم به راحتی به این داده ها دسترسی داشته باشیم روی در سمت سرور در Express، ما باید از برخی میان افزارها استفاده کنیم، مانند body-parser
بسته، برای تجزیه داده ها در قالبی که به راحتی بتوانیم به آن دسترسی داشته باشیم. هنگامی که داده های درخواست HTTP خام تجزیه می شود، می توان از طریق آن به آن دسترسی داشت body
دارایی از req
هدف – شی.
در این مقاله کمی در مورد انواع محتوا/رمزگذاریها، روش استفاده از آن توضیح دادیم body-parser
بسته و گزینه های مختلف آن و روش دسترسی به داده های تجزیه شده. اگر مشکلی مشاهده کردید یا پیشنهادی دارید، در زیر نظر خود را درج کنید.
منتشر شده در 1403-01-24 02:15:03