【发布时间】:2020-01-12 19:23:33
【问题描述】:
我需要创建一个nodejs,用于以下任务:
1) 获取我的公共 IP 地址。 2) 在我的 freenom.com 帐户上更新我注册域的公共 IP 地址。我有两个单独工作的脚本。
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”变量:
'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”值?
【问题讨论】:
-
console的body看起来像什么?如果不是字符串,MY_IP的类型是什么? -
你不能使用
toString()将值转换为字符串吗? -
使用bodyparser
-
你只需要使用回调函数中的值。从那里继续使用它的逻辑。回调在很长一段时间后被调用,在之后的代码已经执行很久之后。因此,ip 地址唯一有效的地方是回调函数中第一次可用的地方。
-
也许这有帮助:felix-kling.de/blog/2019/…
标签: javascript node.js request ip