hapi icon indicating copy to clipboard operation
hapi copied to clipboard

Cannot bind to Fully qualified domain name (FQDN)

Open croeber8 opened this issue 1 year ago • 2 comments

Runtime

NodeJS

Runtime version

NodeJS v18

Module version

Hapi v21

Used with

No response

Any other relevant information

No response

How can we help?

Hello, I am trying to upgrade my hapi to v21. I created a simple project just to make sure everything works.

It seems that hapi is not binding when i use the FQDN. It only binds when using 0.0.0.0. I verified this using netstat -a. This is running NodeJS v18 and HapiJS v21 on Windows Server 2019. It is showing in netstat when the FQDN is used but it looks like this

TCP [fe80::688:fda4:99b5:117%6]:8080 DEVAZRVIRRDV03:0 LISTENING

How can I get HAPI to bind to the FQDN.

Here is my code.

const Path = require('path')
const Fs = require('fs')
const Hapi = require('@hapi/hapi');
const host = 'DEVAZRVIRRDV03.dev.dss.local'
//0.0.0.0 works
//const host = '0.0.0.0'

async function Start() {
    try {

        const server = new Hapi.Server({
            host: host,
            port: 8080,
            // tls: {
            //     cert: Fs.readFileSync(Path.resolve('./cer.cer')),
            //     key: Fs.readFileSync(Path.resolve('./key.key'))
            // }
        });
        server.route({
            method: 'GET',
            path: '/test',
            config: {
                handler: async (request, reply) => {
                    console.log('handled')
                    return {
                        message: 'test'
                    };
                }
            }
        });
        console.log('starting')
        await server.start();
        console.log('started')
    } catch (e) {
        console.error(e)
    }
}
Start()

croeber8 avatar Jan 25 '24 15:01 croeber8

Hapi doesn't do anything with the FQDN, except pass it to the node http server listen() method, documented here.

FYI, the DNS resolution behaviour has been changed in node to prefer IPv6. Unlike for client connections, there doesn't seem to be any way to tell the listener it to prefer IPv4 when resolving it. You will likely have to use the dns module to pre-resolve it yourself.

kanongil avatar Jan 25 '24 16:01 kanongil

Yeah, resolving the host using dns.resolve works. Still weird I have to do that though.

image

croeber8 avatar Jan 25 '24 17:01 croeber8