2017-11-02 4 views
0

小さな問題があります。あなたが私を助けることを願っています 私はNodeJsに天気予報プログラムを書きました。 1人が都市の天気を検索したいとき。彼らはここで検索することができ、アプリはそれらにメッセージを表示します。それが私の問題です。私はユーザーからの入力を取ることができ、私はコマンドラインでその入力を見ることができます。ここではコードです:JavaScript(Node.Js)でサーバーを介してユーザーにメッセージを表示する方法

app.post('/', function(req,res){ 
res.render('index'); 
console.log(req.body.city); 
});  

、これはコードの他の部分ですが、私は、ユーザーにメッセージ表示することはできません。

app.post('/', function (req, res) { 
let city = req.body.city; 
let url = `http://api.openweathermap.org/data/2.5/weather?q=${city}&units=imperial&appid=${apikey}`; 
request(url, function (err, response, body) { 
    if (err) { 
     res.render('index', { weather: null, error: 'Error, please try again' }); 
    } else { 
     let weather = JSON.parse(body); 
     if (weather.main == undefined) { 
      res.render('index', { weather: null, error: 'Error, please try again' }); 
     } else { 
      let weatherText = `It's ${weather.main.temp} degrees in ${weather.name}!`; 
      res.render('index.ejs', { weather: weatherText, error: null }); 
     } 
    } 
}); 

}); 

app.listen(7000, function(){ 
    console.log("Hello Boss \nserver is up at port => 7000"); 

}); 

注:私はこの目的のためのAPIキーを持っています。

+0

私にはいくつか質問があります。 EJSのセットアップはありますか?私は 'express -ejs'を使ってプロジェクトを作成したと仮定しています。 'index.ejs'の関連する内容を見るのに役立ちます。ノードはエラーを出すのか?そうでない場合は、ウェブページ上で何が表示されますか(実際にレンダリングされるのは何ですか)? – ContinuousLoad

+0

ええ、私は 'index.ejs'ファイルを持っています。私は自分ですべてのファイルを作成しました。 私はユーザーにメッセージを表示したいが、できない。私はコードを書いて、あなたはこの質問の第2部からそれを見ることができます。 – MehdiPRG

+0

私が理解しているように、最初のコードブロックは初期テスト用です。その後、2番目のブロックに置き換えました。あれは正しいですか?ファイルを自分で作成した場合は、 'npm install -S ejs'を実行して、Node appに' app.set( "view engine"、 "ejs") 'を付けてください。私はあなたが 'index.ejs'のためのGETを持っていないことに気付きました。ユーザーが最初にそのページをどのように読み込むのですか? – ContinuousLoad

答えて

0

二つの部品を組み合わせてみてください。

app.post('/', function (req, res) { 
console.log(req.body.city); 
let city = req.body.city; 
let url = `http://api.openweathermap.org/data/2.5/weather?q=${city}&units=imperial&appid=${apikey}`; 
request(url, function (err, response, body) { 
    if (err) { 
     res.render('index', { weather: null, error: 'Error, please try again' }); 
    } else { 
     let weather = JSON.parse(body); 
     if (weather.main == undefined) { 
      res.render('index', { weather: null, error: 'Error, please try again' }); 
     } else { 
      let weatherText = `It's ${weather.main.temp} degrees in ${weather.name}!`; 
      res.render('index.ejs', { weather: weatherText, error: null }); 
     } 
    } 
}); 

}); 

app.listen(7000, function(){ 
    console.log("Hello Boss \nserver is up at port => 7000"); 

}); 

Express.jsのみURL /リクエストごとに一つの機能を処理することができます。両方を実行するには、それらを結合する必要があります。

+0

を追加したと確信しています。結果は前の例と同じです。 – MehdiPRG

+0

ええ、私は前にこれをしましたが、答えは得られませんでした。 私にこの問題を解決する方法を示すための誰もがあります。 – MehdiPRG

関連する問題