在node.js中使用api

时间:2017-03-31 07:23:28

标签: javascript html css node.js

我在localhost:8080上使用node.js运行服务器,我想在我的HTML文档中使用api。 html文档是外部的,那么我将如何将api数据发送到网页。例如,我的javascript文件中有一个天气api:

var yw = require('weather-yahoo');
var ans = {};
function loadWeather() {
  yw.getSimpleWeather('denver,co').then(function(res){
      console.log(res);
      ans=res;
      alert(ans);
  }); // pulls just some of the info from yahoo weather
}

并且我在我的html文件中点击了按钮,就像这样:

  <button onclick="loadWeather();">View article descriptions</button>

但它不起作用。顺便说一句,我也在这个文件中包含了javascript文件的来源。

1 个答案:

答案 0 :(得分:1)

您的节点服务器上有一个功能,但现在您需要将其公开给您的客户端。最简单的方法是使用快速模块。

如果您对节点模块和表达并不完全熟悉,可以使用大量的启动教程,例如https://expressjs.com/en/starter/hello-world.html.

在您的情况下,您需要创建一个调用天气数据函数的API调用。

var app = require('express')(),
yw = require('weather-yahoo');

function loadWeather() {
   return yw.getSimpleWeather('denver,co');
}

app.get('/weather', function(req, res){
    loadWeather().then(function(result){
        return res.json(result);
    }, 
    function(error){
        res.status(400).json(error);
    });
});

app.get('/', function(req, res){
     res.sendFile(process.cwd() + '/index.html', null, function(err) {
        if(err){
            res.sendStatus(404);
        }
    });

})

app.listen(3000, function () {
  console.log('Listening on port 3000');
})

这是最简单的API调用,可以通过向api调用添加查询参数,轻松扩展为其他区域返回天气。

在客户端,您现在需要一个函数来调用您的api。 由于上面的示例将索引文件作为其主页面提供,因此简单的JQuery调用天气将返回您想要的数据,因为它位于同一主机上。

<script>
    //This call uses JQuery, make sure you have it referenced in your site
    function callAPI() {
        $.get("weather", function(data, status){
            $('#result').val(JSON.stringify(data));
        });
    }
</script>

<button onclick="callAPI()">Get Weather</button>
<br>
<textarea id="result" style="width:500px; height:500px"></textarea>