如何在node js的http模块中返回设备IP地址而不是127.0.0.1

问题描述 投票:0回答:1

所以,我有一个在 NodeJS 上运行的网站(我不需要在节点上运行它,但我只需要 NodeJS 模块提供的一些功能),并且我有一个 Discord webhook,每次网站打开。 我有这个:

const http = require("http");
const fs = require("fs");
const fetch = require("node-fetch")

const host = "localhost"
const port = 8080
var IP = "Unknown :face_with_raised_eyebrow:"

var params

const requestListener = function (req, res) {
    fs.readFile(__dirname + `${req.url}`, (err, contents) => {
        if (err) {
            contents = fs.readFileSync("index.html", "utf-8")
        }
        res.end(contents);
    })
};
const server = http.createServer(requestListener);
server.listen(port, host, () => {
    IP = server.address().address + ":" + server.address().port
    console.log(`Server is running on http://${host}:${port}`);

    params = {
        content:"تم رفع موقع توثيق غياب الطلاب",
        embeds:[{
            title:"IP Address: " + IP,
        }]
    }

    fetch('https://discord.com/api/webhooks/1156237937864876052/IJ_C3ShEsuHPGU4_21SuCI2b7hawC71nJgP7Hsj6ifk6zjUUAC7xktToF7OfZRzAPw6T', {
        method: "POST",
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(params)
    }).then(async (res) => {
        //console.log(res)
    }) 

})

而且,自然而然地,它说 127.0.0.1,因为就脚本而言,无论它运行在什么设备上,相对于它来说都是 127.0.0.1,但我想改变它,我想让它显示设备的实际IP,因为我的学校将使用这个网站。

请帮忙,如果您对我的代码有任何其他建议,请不要忘记告诉我!

javascript node.js http ip node-modules
1个回答
1
投票

为此,您可以从

https://api.ipify.org
获取 IP,它会返回尝试访问或获取它的任何计算机的 IP。

简而言之,您可以使用它来获取运行该脚本的任何计算机的 IP,这里有一个示例脚本向您展示如何操作:

const fetch = require("node-fetch");

fetch('https://api.ipify.org')
        .then(res => res.text())
        .then(body => body);

首先,您获得

node-fetch
nodejs模块(您可以通过运行
npm i node-fetch
来安装该模块),然后使用它来获取
https://api.ipify.org
。 在最后两行中,我们基本上得到了 API 给我们的结果。

如果您打算让应用程序稍后包含更多客户端/服务器信息,您也可以通过另一种方式执行此操作,方法是创建一个包含名为

getServerIP()
的函数的类,该函数正是为我们执行此操作的:

class Server {
    constructor() {
        this.fetch = require("node-fetch")
    }
    async getServerIP() {
        var result = await this.fetch('https://api.ipify.org')
            .then(res => res.text())
            .then(body => body);
        return result
    }
}

module.exports = {
   Server
}

您可以像这样使用该功能:

const OnlineManager = require("./OnlineManager.js")
const Server = new OnlineManager.Server()

var IP = "Unknown"

IP = await Server.getServerIP()

也可以直接返回

this.fetch()
中的
getServerIP()
函数。

我希望这个答案提供有用的信息

© www.soinside.com 2019 - 2024. All rights reserved.