我有一个app.js
,它构建了一个d3-Graph
。在这个图中有一个Update-Button
。单击按钮后,我想调用另一个node.js文件data.js
的函数。
Update-Button looks like this:
d3.select("#updatebutton").on("click", function(e) {
try{
getJSON();
}
catch (e) {
alert('Error: ' + e);
}
window.parent.location = window.parent.location.href;
});
如果我点击Update-Button
,则抛出错误:
错误:无法读取未定义的属性"get"
get
是指在data.js
中执行的https请求。实施如下:
var https = require('https');
function getJSON() {
var req = https.get(options, function(response) {
// handle the response
var res_data = '';
response.on('data', function(chunk) {
res_data += chunk;
});
response.on('end', function() {
//do anything with received data
});
});
req.on('error', function(e) {
console.log("Got error: " + e.message);
});
req.end();
}
如果我自己运行data.js
(cmd:node data.js),它运行得很好!所以https请求本身是好的。但是,如果我从另一个文件app.js
调用getJSON()
,我会得到上面显示的错误。
如何解决此问题?
var https = require('https'); function getJSON() {...}
是客户端上的代码吗?
我看到您从客户端代码调用getJSON();
,但看起来其他代码应该在服务器端,因此您需要客户端代码调用某种API,而API将返回function getJSON() {...}
函数的结果,因此例如,它将不是客户端对getJSON();
的调用,而是$.get('/api/endpoint', function(data) { ... });
编辑
这里有一个使用Express的API示例,因此您需要将其添加到dependencies
节点>"express": "~4.13.1",
中的package.json
中,并运行npm install
,然后运行node app.js
,假设您将此代码放入app.js
文件中
var express = require('express');
var app = express();
app.get('/api/data', function(req, res) {
// you stuff goes here, getJSON function, etc
// ...
// ...
var sample = {id: 5, name: 'test'};
res.json(sample);
});
app.listen(process.env.PORT || 3000);
您的客户端代码将需要调用API,这可以通过jQuery完成,例如这个
$.get('http://localhost:3000/api/data', function(data){
// handle that 'data' on the client side here
// ...
// ...
});