简体   繁体   中英

Function in module.exports "is not a function"? - nodejs

I'm trying to use badPort function inside another function ( getPort ) in module.exports like so:

DEFAULT_PORT = 80;

module.exports = {
        badPort:
                (c_port, min=80, max=90) => {
                        return isNaN(c_port) || !between(c_port, min, max);
                },
        getPort:
                (c_port, min=80, max=90) => {
                        console.log(this.badPort(c_port));
                        return this.badPort(c_port) ? 80 : c_port;
                },
};     

However, when I use this.badPort(c_port) it throws an exception:

TypeError: this.badPort is not a function

But it's clearly a function as initialised right above it.

If however I take out the () , this.badPort always returns undefined .

Why is this happening and how would I be able to correctly use the function inside module.exports ? Is it possible to also declare the "Global variable" DEFAULT_PORT in module.exports this way?

You can do it, by changing this to module.exports :

DEFAULT_PORT = 80;

module.exports = {
        badPort:
                (c_port, min=80, max=90) => {
                        return isNaN(c_port) || !between(c_port, min, max);
                },
        getPort:
                (c_port, min=80, max=90) => {
                        console.log(module.exports.badPort(c_port));
                        return module.exports.badPort(c_port) ? 80 : c_port;
                },
};

And about second question... you would have to redefine your module, to use that variable externally, like this:

module.exports.DEFAULT_PORT = 80;

Then you will have access to it:

var mod = require('mymodule');
console.log(mod.DEFAULT_PORT);

I am not aware of any other way.

Have you try this to change ":" by "=" like:

DEFAULT_PORT = 80;

module.exports = {
    badPort = (c_port, min=80, max=90) => {
                    return isNaN(c_port) || !between(c_port, min, max);
            },
    getPort = (c_port, min=80, max=90) => {
                    console.log(this.badPort(c_port));
                    return this.badPort(c_port) ? 80 : c_port;
            },
};  

To reference badPort from the other function you can write it this way:

DEFAULT_PORT = 80;

const badPort = (c_port, min=80, max=90) => {
  return isNaN(c_port) || !between(c_port, min, max);
};

const getPort = (c_port, min=80, max=90) => {
  console.log(badPort(c_port));

  return badPort(c_port) ? 80 : c_port;
};

module.exports = {
  badPort,
  getPort
};     

And if you're curious on how to import it correctly, here is an example of a correct import from another js file in the same directory:

const port = require('./port.js');
console.log(port.badPort(1000));

And your default port can be an environment variable using process.env https://nodejs.org/dist/latest-v8.x/docs/api/process.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM