[英]How do i get return value when i call this functions?
我需要为以下任务创建一个nodejs:
1) Get my public IP address. 2) Update my public IP Address on my freenom.com account, for my registered domain.
我有两个脚本分开工作。
1)获取我的公共IP(npm安装请求):
'use strict';
var request = require('request');
request('http://api.ipify.org', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
else {
console.log("Error "+response.statusCode);
}
})
// This print my public IP correctly
2)更新我的Freenom帐户中的IP(npm install -g freenom-dns):
'use strict';
var user = "my@user_email.com";
var pass = "mypass";
var freenom = require("freenom-dns").init(user, pass);
freenom.dns.setRecord("myregistereddomain.com", "A", "12.12.12.12" , 3600)
.then(function(ret) {
console.log(ret)
})
.catch((err) => {
console.log(err);
});
// This update my new public IP on my freenom account as 12.12.12.12 correctly
我尝试声明一个全局变量,并尝试在我的第一个脚本(获取公共IP)上将“ body”函数返回值传递给它,然后,调用第二个脚本,传递“ My_IP” var:
'use strict';
var My_IP = ""
var user = "my@user_email.com";
var pass = "mypass";
var freenom = require("freenom-dns").init(user, pass);
var request = require('request');
request('http://api.ipify.org', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
My_IP = body;
}
else {
console.log("Error "+response.statusCode);
}
})
freenom.dns.setRecord("myregistereddomain.com", "A", My_IP , 3600)
.then(function(ret) {
console.log(ret)
})
.catch((err) => {
console.log(err);
});
但是My_IP的类型不是String变量。 更新公共IP功能,仅允许将字符串值用作参数。 调用此函数时,如何获得“ body”值?
看来My_IP
是字符串变量。 正义值是空的
您应该检查执行顺序。 request()
是异步任务
通过回调函数返回数据
这是执行顺序
My_IP = ''
request(..., callback)
freenom.dns.setRecord(..., My_IP) // My_IP is still empty
callback() // My_IP is update here
您可以像这样实现(或使用Promise,Async函数等。)
request('http://api.ipify.org', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
My_IP = body;
handler() // After My_IP was updated
}
else {
console.log("Error "+response.statusCode);
}
})
function handler () {
freenom.dns.setRecord("myregistereddomain.com", "A", My_IP , 3600)
.then(function(ret) {
console.log(ret)
})
.catch((err) => {
console.log(err);
});
}
IMO看起来,请求返回了Promise并在请求获得响应之前调用setRecord尝试:
'use strict';
const freenom = require("freenom-dns").init(user, pass);
const request = require('request');
let My_IP = "";
let user = "my@user_email.com";
let pass = "mypass";
const createRequest = () => {
request('http://api.ipify.org', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
My_IP = body;
setDns();
}
else {
console.log("Error "+response.statusCode);
}
})
};
const setDns = () => {
freenom.dns.setRecord("myregistereddomain.com", "A", My_IP , 3600)
.then(function(ret) {
console.log(ret)
})
.catch((err) => {
console.log(err);
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.