Ничего не геокодировать - API погоды - Nodejs - PullRequest
0 голосов
/ 22 февраля 2019

Я новичок в Nodejs и пытаюсь использовать API погоды.

Когда я проверяю ссылку в браузере, она дает мне точный ответ

http://api.openweathermap.org/data/2.5/weather?q=karachi&appid=dcf486a78f2b8e898c4b1a464a1b31e1

, пока она выдает ошибку.

const express = require("express")
var logger = require("morgan")
var path = require("path")
var bodyParser = require("body-parser")
let requested = require('request');

var app=express()
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
  }));

app.set("views", path.resolve(__dirname,"views"))
app.set("view engine",'ejs')

app.use(logger("short"))

app.get("/",function(request,response)
{
    response.render("homepage")
})

app.post('/', function(request, response) {
    var urlOpenWeatherCurrent = 'http://api.openweathermap.org/data/2.5/weather?'
    var queryObject = {
        APPID: "dcf486a78f2b8e898c4b1a464a1b31e1",
        city: request.body.cityName
    }
    console.log(queryObject)
    requested({
        url:urlOpenWeatherCurrent,
        q: queryObject           // In many tutorials they used 'qs' instead of 'q'. I don't know why.
    }, function (err, response, body) {
    // response.send('You sent the name ' + request.body.cityName + ".");
    if(err){
      console.log('error:', error);
    } else {
      console.log('body:', JSON.parse(body));

    }
  });
});


app.use(function(request,response)
{
    response.status(404)
    response.send("Error")
})


app.listen(3000,()=>console.log("Working"))

Ошибка

{ APPID: 'dcf486a78f2b8e898c4b1a464a1b31e1', city: 'karachi' }
'Invalid API key. Please see http://openweathermap.org/faq#error401 for more info.'

Если я изменю q на qs в nodejs, тогда

{ APPID: 'dcf486a78f2b8e898c4b1a464a1b31e1', city: 'karachi' }
body: { cod: '400', message: 'Nothing to geocode' }

Обратите внимание, что изменение q на qs в raw html API-ссылке также указывается

{"cod":"400","message":"Nothing to geocode"}

Я полагаю из ответа, что я должен использовать qs в nodejs, потому что по крайней мере на этот раз он не считает ключ API неправильным.Но в ссылке API у нас есть q, а не qs.Так почему же qs имеет смысл?Кроме того, насколько я понял, он не соединяет строки API должным образом, что приводит к сбоям в работе.Но я не знаю, как напечатать всю ссылку в консоли, чтобы проверить, что я только что сказал.

views / homepage.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form class="pure-form" action="/" method="POST">
        <input type="name" placeholder="City name" name="cityName" autofocus required>
        <input type="submit" valuue="Go">
    </form>
</body>
</html>

1 Ответ

0 голосов
/ 23 февраля 2019

вставьте "q" и "ключ API" с URL-адресом открытой погоды, например "http://api.openweathermap.org/data/2.5/weather?q=${city}&units=imperial&appid=${apiKey}", также проверьте эту ссылку https://codeburst.io/build-a-weather-website-in-30-minutes-with-node-js-express-openweather-a317f904897b

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...