[英]Function returning undefined variable Javascript
在Javascript中,当我从另一个js文件调用此函数时,我的控制台输出中未定义。 我可以将json对象称为“obj”而不是未定义吗?
module.exports = {
getTechnicPackInfo: function(id){
var http = require("https");
var options = {
"method": "GET",
"hostname": "solder.io",
"path": "/api/aurora-crafters/modpacks/" + id,
"headers": {
"accept": "application/json",
"content-type": "application/Json",
"authorization": "Bearer 00000000000000000000000000000"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
var obj = JSON.parse(body);
return obj;
});
});
req.end();
}
}
你遇到的问题是由于函数getTechnicPackInfo
没有返回任何值,而不是内部函数。
你想要做的是使用fetch
api获取你想要获取的所有东西并返回fetch
返回的值。 这允许您执行以下操作:
getTechnicPackInfo(...).then(resultingData => resultingData.json()).then(parsedData => ...)
这是有效的,因为fetch
返回一个Promise
允许你用.json
解析数据(它有自己的函数,因为你不能简单地做JSON.parse
),这会返回另一个Promise
fetch
fetch
不是node.js中内置的默认函数,因此,您必须在安装node-fetch
后导入它。
npm install --save node-fetch
import fetch from 'node-fetch';
您没有从getTechnicPackInfo函数返回任何内容。
你可以做的是使用util.promisify你的http请求,然后返回承诺。
上面的答案是正确的,但节点env中没有api fetch,有一个模块npm来添加它:“ node-fetch ”。
如果你不想安装这个模块,解决方案是在函数getTechnicPackInfo()中添加一个回调参数:
file1.js:
module.exports = {
getTechnicPackInfo: function(id, callback){
var http = require("https");
var options = {
"method": "GET",
"hostname": "solder.io",
"path": "/api/aurora-crafters/modpacks/" + id,
"headers": {
"accept": "application/json",
"content-type": "application/Json",
"authorization": "Bearer 00000000000000000000000000000"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
var obj = JSON.parse(body);
callback(obj);
});
});
req.end();
}
}
file2.js
var f = require('./file1.js');
f.getTechnicPackInfo(123456, function(obj) {
//do what you need with obj
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.