Node.js is a JavaScript runtime based on the Chrome V8 engine. It allows JavaScript to run not only on the browser side, but also on the server side. Node.js makes it easy to write efficient web applications. However, when using Node.js for network application development, sometimes you encounter the problem of being unable to access external network URLs. Let’s take a closer look at this issue.
First, confirm whether the network connection is normal. Under Linux, you can use the ping command to test whether the external network link is normal, for example:
$ ping www.baidu.com
If the result shows that there is a network and returns normal, then the problem is most likely not a problem with the network connection.
Some network libraries have their own restrictions, which may cause failure to access external network URLs. For example, if you use the axios library, then you can disable it from using a proxy by:
const axios = require('axios'); // 禁止 axios 使用代理 axios.defaults.proxy = false;
If you are using another network library, please check if it has its own restrictions and how to cancel it limits.
Both firewalls and proxies may affect Node.js' access to external URLs. Therefore, we need to check the firewall and proxy settings.
Under the Linux system, we can view the system's firewall policy through the following command:
$ iptables -L -n
Under the Windows system, we can view the system's firewall policy through the following command:
> netsh advfirewall firewall show rule name=all
If the firewall sets restrictions, corresponding adjustments need to be made.
In addition, if your network environment has a proxy, you may need to add the proxy address to the Node.js system environment variable. For example, under Linux systems, you can set environment variables in the following ways:
$ export http_proxy=http://proxy.example.com:8080
Under Windows systems, you can set environment variables in the following ways:
> set http_proxy=http://proxy.example.com:8080
Node.js accesses external URLs through DNS domain name resolution. If there is a problem with the DNS configuration, Node.js may not be able to access the external URL.
To solve this problem, we can use the following command to view the DNS configuration of the system:
$ cat /etc/resolv.conf
If there is a problem with the DNS configuration, it needs to be adjusted accordingly.
Node.js uses some third-party domain name resolution libraries, such as c-ares. There may be some limitations in these libraries that may prevent Node.js from accessing external URLs.
In order to solve this problem, we can try to set Node.js runtime parameters to disable some problematic domain name resolution libraries. For example, under Linux systems, you can use the following command to disable the c-ares library:
$ node --use-openssl-ca --no-deprecation app.js
Under Windows systems, you can use the following commands to disable the c-ares library:
> node --use-openssl-ca --no-deprecation app.js
The last and most common question is whether the URL is correct. Please make sure the URL is correct. Note that if the URL contains spaces or other special characters, you will need to use URL encoding to escape these characters.
In Node.js, you can use the built-in module querystring
for URL encoding. For example:
const querystring = require('querystring'); const url = 'http://www.example.com/?name=张三&age=30'; const encodedUrl = encodeURI(url); const encodedQuery = querystring.encode(encodedUrl); console.log(encodedQuery);
To sum up, the problem of being unable to access the external URL is very common, but by checking one by one according to the above method, you can basically find the problem. It should be noted that when conducting troubleshooting, you need to take the problem seriously, analyze it carefully, and do not jump to conclusions hastily.
The above is the detailed content of nodejs cannot access external network url. For more information, please follow other related articles on the PHP Chinese website!