我在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文件的来源。
答案 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>