Node.js获取本地ip与公网ip的实现方式

2019-07-18  本文已影响0人  Tme_2439
原因:因保存前端传递的文件需要以静态文件资源的形式保存到数据库,所以需要处理下路径。
以下两种实现方案均为网络收集,验证有效

获取本机本地ip

function getIPAddress(){
    var interfaces = require('os').networkInterfaces();
    for(var devName in interfaces){
        var iface = interfaces[devName];
        for(var i=0;i<iface.length;i++){
            var alias = iface[i];
            if(alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal){
                return alias.address;
            }
        }
    }
  }
console.log(getIPAddress()) // 本地ip

使用第三方模块:request-ip封装中间件获取用户公网ip

详见:https://github.com/pbojinov/request-ip

const requestIp = require('request-ip');
// inside middleware handler
const ipMiddleware = function(req, res, next) {
    const clientIp = requestIp.getClientIp(req); 
    next()
}
// on localhost you'll see 127.0.0.1 if you're using IPv4 
// or ::1, ::ffff:127.0.0.1 if you're using IPv6
---------------------------------------------------------------------------------------
// 封装成全局可使用的中间件
const requestIp = require('request-ip');
app.use(requestIp.mw())
app.use(function(req, res) {
    const ip = req.clientIp;
    res.end(ip);
})

使用第三方模块:public-ip获取本机公网ip

详见:https://github.com/sindresorhus/public-ip

npm install --save public-ip // 先安装依赖
// 在需要的地方require
const publicIp = require('public-ip') // 获取外网ip
publicIp.v4().then((ip) => console.log(ip)) // 调用模块提供的api即可获取

使用第三方模块:internal-ip获取本机内网ip

详见:https://github.com/sindresorhus/internal-ip

const internalIp = require('internal-ip'); // 在需要的地方require
(async () => {
    console.log(await internalIp.v6());
    //=> 'fe80::1'

    console.log(await internalIp.v4());
    //=> '10.0.0.79'
})()
console.log(internalIp.v6.sync()) //  'fe80::1'
console.log(internalIp.v4.sync()) //  '10.0.0.79'
npm install --save public-ip // 先安装依赖
上一篇下一篇

猜你喜欢

热点阅读