جستجو در بخش : سوال جواب منابع اسلامی لغت نامه ها قوانین و مصوبات نقل قل ها
×

فرم ورود

ورود با گوگل ورود با گوگل ورود با تلگرام ورود با تلگرام
رمز عبور را فراموش کرده ام عضو نیستم، می خواهم عضو شوم
×

×

آدرس بخش انتخاب شده


جهت کپی کردن میتوانید از دکمه های Ctrl + C استفاده کنید
رویداد ها - امتیازات
در حال بارگذاری
×

رویداد ها - امتیازات

برای بررسی عملکرد فعالیت و امتیازات خود باید در وب سایت وارد باشید. در صورت عضویت از بخش بالای صفحه وارد شوید، در غیر این صورت از دکمه پایین، مستقیم به صفحه ثبت نام وارد شوید.

×
×
×

دلیل درخواست بستن پست

کلیه پست هایی که جنبه تبلیغاتی داشته، محتوای اسپم و بی مفهوم در این دسته قرار میگیرند. همچنین پست هایی که به منظور گرفتن بک لینک درج می شوند شامل این مورد هستند.
حاوی مفاهیم غیر اخلاقی، سیاسی و یا توهین آمیز. کلیه پست هایی که از نظر محتوایی نیاز به بررسی و یا حذف شدن دارند در این دسته قرار می گیرند.
محتوایی با عدم جزئیات کافی و مورد نیاز. کلیه پست هایی که منظور نویسنده به وضوح مشخص نیست و نیازمند توضیحات و جزئیات بیشتر می باشند در این دسته قرار می گیرند.
محتوایی بی ربط با موضوعیت سرفصل کلی. کلیه پست هایی که از منظر مفهوم و مضمون ارتباطی با عنوان اصلی سوال ندارند در این دسته قرار می گیرند.
محتوایی دلخواه و بر پایه سلیقه. کلیه پست هایی که یک پاسخ مشخص ندارند و متوانند چندین پاسخ متفاوت و صحیح داشته باشند که کاملا مبتنی بر نظر شخصی افراد هستند در این دسته قرار می گیرند.
محتوایی در حوزه خیلی وسیع. کلیه پست هایی که از نظر محتوایی در یک حوزه ی وسیعی قرار دارند و مشخصا به یک موضوع خاصی اشاره ندارند که پاسخدهی به آن ها مستلزم تشریح مفاهیمی کلی می باشند در این دسته قرار می گیرند.
قبلا در لام تا کام مطرح شده. پست هایی که دقیقا با همین محتوا و مضمون قبلا در وب سایت لام تا کام درج شده اند، با ذکر آدرس منبع تکراری با پست حال حاضر شامل این دسته هستند. تکراری است با:
به سایر دلایل، نیازمند به بررسی توسط مدیر. به هر دلیل غیری که پست را نیازمند بررسی توسط مدیر کرده، با ذکر دلیل، در این دسته قرار میگیرد.
ارسال رای بستن

چگونه در node.js درخواست POST یا GET بفرستم؟


3
0
1753

چگونه می توانم در خواست POST یا GET را به صورت HTTP بفرستم

و از دیتای بازگشتی آن استفاده کنم؟

من با توجه به جست و جو هایی که داشتم به این نتیجه رسیدم که از پکیج axios استفاده کنم و به صورت زیر هم استفاده کردم.

var postData = {
  email: "[email protected]",
  password: "password"
};

let axiosConfig = {
  headers: {
      'Content-Type': 'application/json',
      "Access-Control-Allow-Origin": "*",
  }
};

axios.post('http://<host>:<port>/<path>', postData, axiosConfig)
.then((res) => {
  console.log("RESPONSE RECEIVED: ", res);
})
.catch((err) => {
  console.log("AXIOS ERROR: ", err);
})

اما خروجی من به صورت علائم عجیب و غریب هست . آیا راه حلی در نظر دارید ؟

علمی نود.جی-اس
ویرایش شده در 5 سال قبل
سوال شده در Hamed  Eskandari
40 امتیاز

500 کاراکتر باقی مانده

2 جواب

5

خب برای انجام دادن کاری که میخواید انجام بدید روش های زیادی وجود داره. من 5 تا از روش های ارسال درخواست های HTTP در Node.Js رو خدمتتون میگم:

1- کتابخانه استاندارد HTTP

اولین راه ماژول (module) پیشفرض HTTP است. با استفاده از ماژولل (module) HTTP می توانید بدون نیاز به نصب پکیج از آن استفاده کنید. کد زیر یک در خواست GET به APIناسا ارسال می کند و دیتای آن که راجب تصویر نجومی روز است را چاپ می کند .

const https = require('https');

https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => {
  let data = '';

  // A chunk of data has been recieved.
  resp.on('data', (chunk) => {
    data += chunk;
  });

  // The whole response has been received. Print out the result.
  resp.on('end', () => {
    console.log(JSON.parse(data).explanation);
  });

}).on("error", (err) => {
  console.log("Error: " + err.message);
});

بخش بزرگی از عملکرد HTTP و HTTPS ماژول نسبتا پایین است. شما نیاز دارید که دیتا های بازگشتی را به ترتیب دریافت کنید و یک تابع برای صدا زدن را به محض دریافت تمام اطلاعات وجود ندارد. شما همچنین باید داده های پاسخ را به صورت دستی تجزیه کنید.

مشکل دیگری که وجود دارد این است که این ماژول (module) به طور پیشفرض از HTTPS پشتیبانی نمی کند. ما نیاز داریم به require شدن HTTPS .

اگر شما امکانات زیادی از این ابزار نمی خواهید. این یک ابزار عالی برای شما است.


2 - Request

این کتابخانه بسیار کاربر پسند تر از کتابخانه پیشفرض HTTP است.

انتخاب شخصی من برای استفاده در NodeJs کتابخانه Request است و برخلاف ماژول HTTP برای انجام سریع کار ها عالی است.

شما باید این کتابخانه را از طریق NPM نصب کنید به صورت زیر: npm install request

همانطور که مشاهده می کنید برای کاری مشابه بالا نیاز به کد کمتری هست.

const request = require('request');

request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => {
  if (err) { return console.log(err); }
  console.log(body.url);
  console.log(body.explanation);
});

یک گزینه فوق العاده است برای استفاده آسان از در خواست های HTTP است.

اگر می خواهید از Promises استفاده کنید، می توانید از کتابخانه request-promiseاستفاده کنید.


3- Axios

اگزیوس یک کتابخانه مبتنی بر Promises است.

مزیت مهم Promisesزمانی است که به صورت پیچیده از event ها استفاده کرده ایم و بقیه کد باید منتظر جواب درخواست های قبلی باشد. برای استفاده از axiosخط زیر را در ترمینال (terminal) خود وارد کنید.

npm install axios

کد زیر همان کاری را می کند که کد های بالا انجام می دادند.

const axios = require('axios');

axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY')
  .then(response => {
    console.log(response.data.url);
    console.log(response.data.explanation);
  })
  .catch(error => {
    console.log(error);
  });

axios به طور پیشفرض JSON را تجریه می کند.

.catch() میتوانیم خطا ها رو متوجه شویم.

شما می توانید با استفاده از axios.all در خواست های خود را به صورت همزمان یا موازی (multiple) ارسال کنید

var axios = require('axios');

axios.all([
  axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-03'),
  axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-02')
]).then(axios.spread((response1, response2) => {
  console.log(response1.data.url);
  console.log(response2.data.url);
})).catch(error => {
  console.log(error);
});

4- SuperAgent

شبیه به axios است. SuperAgent یکی دیگر از کتابخانه های محبوب ارسال درخواست HTTPاست .

با کامند زیر آن را نصب کنید.

npm install superagent 

و کد زیر را امتحان می کنیم.

const superagent = require('superagent');

superagent.get('https://api.nasa.gov/planetary/apod')
.query({ api_key: 'DEMO_KEY', date: '2017-08-02' })
.end((err, res) => {
  if (err) { return console.log(err); }
  console.log(res.body.url);
  console.log(res.body.explanation);
});

با متد query() بخش هایی را به URL اضافه می کنیم ولی در روش های قبلی خودمان به صورت دستی این عمل رو انجام می دادیم.

SuperAgent خود JSON را مانند axios تجزیه می کند و نیازی به تجزیه دوباره آن نیست.

5-GOT

اگر به دنبال یک کتابخانه سبک می باشید GOT می تواند انتخاب خوبی برای شما باشد.

با کامند زیر آن را نصب می کنیم.

npm install got

مانند axios این کتابخانه نیز با Promises کار می کند

const got = require('got');

got('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }).then(response => {
  console.log(response.body.url);
  console.log(response.body.explanation);
}).catch(error => {
  console.log(error.response.body);
});

و چندین راه دیگر

با توجه به شرایط پروژه خود از یکی از روش ها استفاده کنید.

موفقق باشید.

ویرایش شده در 5 سال قبل
جواب داده شده در علی رضایی <m>★</m>
1139 امتیاز

500 کاراکتر باقی مانده


1

اگر درخواست شما به درستی رخ میدهد و ریپسانس یا همان پاسخی که دریافت میکنید از درخواستتان یک محتوای بهم ریخته است و اغلب به صورت علامت سوال است؛ من احتمال میدهم که مشکل از هدرها باشند.

و از اونجایی که در هدر هایی که شما ست کردید هیچ ردی از utf8 نیست، پیشنهاد می کنم که هدرهاتون رو از این حالت:

  headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Length': Buffer.byteLength(post_data)
  }

به این حالت تغییر بدید:

headers: {
      'Content-Type': 'application/json;charset=UTF-8',
      'Access-Control-Allow-Origin': '*',
      'Content-Length': Buffer.byteLength(post_data)
  }
جواب داده شده در ساناز رضایی
1366 امتیاز

500 کاراکتر باقی مانده


جواب شما
     
.....
×

×

جعبه لام تا کام


وب سایت لام تا کام جهت نمایش استاندارد و کاربردی در تمامی نمایشگر ها بهینه شده است.

تبلیغات توضیحی


داپ اَپ اولین پلتفرم کش‌بک در ایران
اگه میخوای از خریدهایی که میکنی، پاداش نقدی دریافت کنی داپ اَپ رو نصب کن.

تبلیغات تصویری