NodeJS LocalTunnel随机崩溃,子域不再工作

8fsztsew  于 2023-03-29  发布在  Node.js
关注(0)|答案(2)|浏览(113)

我有一个通过Node在我的机器上运行的服务器。当我的电脑在使用lt --subdomain mydomain --port 3000的自定义子域下启动时,它会运行。我注意到它在大约6小时后开始随机崩溃。我把这归结为节点服务器或localtunnel重新启动或我的互联网质量差。
当我重新运行上面的localtunnel命令时,它说子域被占用(给出一个随机子域)。我如何使localtunnel正确关闭隧道以允许我的子域被重用?

cyej8jka

cyej8jka1#

我已经成功地创建了一个类,如果发生连接错误,它会重新挖掘/重新启动隧道。这不是解决问题的方法,但它可以防止它发生。我已经使用这个解决方案一年了,没有遇到任何问题,所以我希望它对你也有效。
easy-tunnel.js

const { exec } = require("child_process")
const colours = require("colors")
const base_host = 'http://localtunnel.me'
 
class EasyTunnel {
    /**
     * 
     * @param {number} port 
     * @param {string} subdomain 
     * @param {string} [host] defaults to 'http://localtunnel.me'
     */
    constructor(port, subdomain, host) {
        this.port = port
        this.subdomain = subdomain
        this.host = host ? host : base_host
    }
    /**
     * Start the EasyTunnel
     * @param {string} [status] used so redigging does not show initial dig message
     */
    start(status) {
        if (status != 'redig') console.log(`> Dug a tunnel for ${this.subdomain.yellow} on port ${this.port.toString().cyan} at ${this.host.green}`)
        exec(`lt --subdomain ${this.subdomain} --port ${this.port} --host ${this.host}`, async (err, out) => {
            if (err.toString().includes('connection refused')) {
                this.start("redig")
                console.log("> Redigging tunnel")
            }
        })
    }

}

module.exports = EasyTunnel

main-app.js

var express = require("express")
var easyTunnel = require("./imports/easy-tunnel")
var port = 3000
var localtunnel = new easyTunnel(port, 'website-name')
var app = express();

app.get("/", (req, res) => {
    res.send(":)")
}

app.listen(port, () => localtunnel.start());
0yg35tkg

0yg35tkg2#

不幸的是,当这种情况发生时,你必须等到域名被释放。我不知道确切的时间,但它不是几秒钟。
在windows中,要正确关闭,我用途:Ctrl+C

相关问题