在Node js中的功能之外无法访问外部IP

Posted

技术标签:

【中文标题】在Node js中的功能之外无法访问外部IP【英文标题】:External IP is not accessible outside the function in Node js 【发布时间】:2020-06-10 20:21:19 【问题描述】:

我是新来的。我正在尝试使用名为“external-ip”的包获取外部 IP 他们的示例中有此代码

const getIP = require('external-ip')(); 
getIP((err, ip) => 
          if (err) 
              // every service in the list has failed
              throw err;
          
          ip = ip;
          console.log(ip);
);

它运行良好,但是我想在函数之外使用 IP,请问我该如何使用它?

我试过了,但对我没用

const ipaddress = getIP((err, ip) => 
          if (err) 
              // every service in the list has failed
              throw err;
          
          return ip;
          console.log(ip);
);

console.log(ipaddress);

【问题讨论】:

用'let'定义你的ip变量,并在你的函数之外进行 成功了!谢谢。如果我可以问如果我返回IP怎么办?它会存储在 ipaddress 变量中吗? 【参考方案1】:

首先用 let 定义 ip

ip 在程序的本地范围内定义,这意味着它只能在您的函数中访问。现在您应该尽可能避免使用全局范围,因为这通常被认为是不好的做法,但这是让您可以从程序中的任何位置访问 ip 变量的一种方法。另一种方法是退货

const getIP = require('external-ip')(); 
const ipaddress = getIP((err, ip) => 
          if (err) 
              // every service in the list has failed
              throw err;
          
          console.log(ip);
          return ip;
);

let ip = ipaddress()
console.log(ip)

请注意,return 语句之后的任何内容都是死代码并且不会运行,因此您要运行的任何代码都应该放在任何 return 语句之前(注意 console.log() 在函数中的位置

【讨论】:

【参考方案2】:

这会起作用

let ipaddress;
getIP((err, ip) => 
          if (err) 
              // every service in the list has failed
              throw err;
          
          ipaddress = ip;
);

console.log(ipaddress);

Edgar Cuarezma 的解决方案

【讨论】:

尽可能避免使用全局变量,这是不好的做法,如果你要在 javascript 中使用全局变量 in 应该是不可变的,这意味着你应该使用 const 而不是 @ 987654323@

以上是关于在Node js中的功能之外无法访问外部IP的主要内容,如果未能解决你的问题,请参考以下文章

从外部访问 Leaflet.js GeoJson 功能

无法从 TS 文件访问外部 JS 文件的功能

无法访问 Node.js 中的其他文件

无法使用节点 js 访问桌面应用程序中的窗口关闭功能

docker网络技术剖析

JS封闭函数闭包内置对象