<p>طلب عدم دعم الأحرف مثل: "í" ، "ë" ، "å" ..</p>

تم إنشاؤها على ٢٤ أغسطس ٢٠١٨  ·  3تعليقات  ·  مصدر: request/request

ملخص

مرحبًا ، لقد مرت أيام قليلة أعاني من مشكلة. أحاول جلب المعلومات حول مدينة باستخدام [openweathermap api] (https://openweathermap.org/current. يبدو الطلب العادي مثل هذا ، على سبيل المثال:
http://api.openweathermap.org/data/2.5/weather؟q= CITY & Units = metric & appid =

(يمكنك إعادة إنتاج هذا في متصفحك باستخدام مفتاح API مجاني)

النتيجة: (JSON)
{"coord":{"lon":-73.61,"lat":45.5},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"base":"stations","main":{"temp":24.65,"pressure":1012,"humidity":38,"temp_min":24,"temp_max":25},"visibility":48279,"wind":{"speed":7.2,"deg":280,"gust":11.3},"clouds":{"all":40},"dt":1535058000,"sys":{"type":1,"id":3829,"message":0.0049,"country":"CA","sunrise":1535018756,"sunset":1535068008},"id":6077243,"name":"Montreal","cod":200}

أستخدم هذه الوظيفة المصنوعة من وحدة الطلب:

"

function req (url, jsonStatus){
    const options = {
        uri: url,
        json: jsonStatus 
    }

    console.log(`Sent: ${options.uri}`)

    rp(options)
        .then(repos => {
            console.log(`Success: ${repos.sys.country}`) // Country code is returned
        })
        .catch(err => {
            console.log(`Error: ${err}`)
        })
}}
const owmUrl = `http://api.openweathermap.org/data/2.5/weather?q=${City}&units=metric&appid=${apiKey}`;
req(owmUrl, true);

Outpout (وحدة التحكم) (حيث تكون المدينة "مونتريال"):
λ تطبيق العقدة
تم الإرسال: http://api.openweathermap.org/data/2.5/weather؟q=montreal&units=metric&appid= APIKEY

النجاح: CA`

كما ترى هنا ، فإن الطلب ناجح. عند محاولة استخدام مدن ذات أحرف خاصة مثل "Chamberí" من المتصفح ، كل شيء يسير على ما يرام ، يبدو عنوان url على النحو التالي:
http://api.openweathermap.org/data/2.5/weather؟q=Chamberí&units=metric&appid= APIKEY

والنتيجة هي (JSON مرة أخرى):
{"coord":{"lon":-3.71,"lat":40.44},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"base":"stations","main":{"temp":27.24,"pressure":1020,"humidity":32,"temp_min":27,"temp_max":28},"visibility":10000,"wind":{"speed":3.6,"deg":110},"clouds":{"all":0},"dt":1535059800,"sys":{"type":1,"id":5488,"message":0.0039,"country":"ES","sunrise":1535002448,"sunset":1535050778},"id":3117735,"name":"Chamberí","cod":200}

ولكن إذا أرسلت هذا بالرمز الذي أنشأته ، فسينتهي بي الأمر بهذا:

λ node app Test Sent: http://api.openweathermap.org/data/2.5/weather?q=Chamberí&units=metric&appid=0ec25df3f69726843a58a325b97e845d Error: StatusCodeError: 404 - {"cod":"404","message":"city not found"}

لا أفهم سبب تلقي هذا الخطأ لأن تجربة نفس عنوان url في المتصفح يعمل بشكل مثالي. حاولت استخدام الوحدتين الوعدتين -طلب-الوعد- والطلب-الوعد- ولكن كلاهما يُرجع الخطأ نفسه.

هذا شيء خاطئ ولا أعرف ما إذا كنت أنا من الوحدة. إذا كان بإمكاني الحصول على المساعدة ، فسوف أكون ممتنا للغاية :)

شكر.

(آسف إذا كان هناك خطأ ما في طلبي ، فهذه هي المرة الأولى التي أفعل فيها ذلك :))

بيئتك

| البرمجيات | الإصدار
| ---------------- | -------
| طلب | [email protected]
| عقدة | الإصدار 10.9.0
| npm | 6.2.0
| نظام التشغيل | نظام التشغيل windows 8.1 x64
| متصفح | الأوبرا

التعليق الأكثر فائدة

كيفية ترميز معلمات URL؟

قم بترميز اسم المدينة إذا كان يحتوي على أحرف غير ASCII:

console.log(encodeURIComponent('Montreal'));
console.log(encodeURIComponent('Montréal'));
console.log(encodeURIComponent('Chamberí'));

انتاج:

Montr%C3%A9al
Chamber%C3%AD

بيانات Chamberí بعد ترميز الاسم قبل تقديم الطلب:

{ coord: { lon: -3.71, lat: 40.44 },
  weather:
   [ { id: 800, main: 'Clear', description: 'clear sky', icon: '01n' } ],
  base: 'stations',
  main:
   { temp: 21.98,
     pressure: 1020,
     humidity: 49,
     temp_min: 21,
     temp_max: 23 },
  visibility: 10000,
  wind: { speed: 1.5, deg: 40 },
  clouds: { all: 0 },
  dt: 1535068800,
  sys:
   { type: 1,
     id: 5488,
     message: 0.0038,
     country: 'ES',
     sunrise: 1535088854,
     sunset: 1535137170 },
  id: 3117735,
  name: 'Chamberí',
  cod: 200 }

ال 3 كومينتر

كيفية ترميز معلمات URL؟

قم بترميز اسم المدينة إذا كان يحتوي على أحرف غير ASCII:

console.log(encodeURIComponent('Montreal'));
console.log(encodeURIComponent('Montréal'));
console.log(encodeURIComponent('Chamberí'));

انتاج:

Montr%C3%A9al
Chamber%C3%AD

بيانات Chamberí بعد ترميز الاسم قبل تقديم الطلب:

{ coord: { lon: -3.71, lat: 40.44 },
  weather:
   [ { id: 800, main: 'Clear', description: 'clear sky', icon: '01n' } ],
  base: 'stations',
  main:
   { temp: 21.98,
     pressure: 1020,
     humidity: 49,
     temp_min: 21,
     temp_max: 23 },
  visibility: 10000,
  wind: { speed: 1.5, deg: 40 },
  clouds: { all: 0 },
  dt: 1535068800,
  sys:
   { type: 1,
     id: 5488,
     message: 0.0038,
     country: 'ES',
     sunrise: 1535088854,
     sunset: 1535137170 },
  id: 3117735,
  name: 'Chamberí',
  cod: 200 }

شكرا لك !!

: +1:

شكرا لك davejagoda

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات