简体   繁体   中英

Can't access function after name changed in node.js

There is a function in one of my files in project which I changed it's name and can't access it with new name! still the old name is available to call

I tried deleting node_modules and install it again using npm i

there is the code to both files I'm using:

soapCall.js

before:

function call(username, password){
    ...
}

module.exports = call

after:

function checkUser(username, password){
    ...
}

module.exports = checkUser

how I imported and used:

app.js

const soap = require('../../models/soapCall');
...
soap.checkUser(username, password);

it's weired that still I can't access the new function name

I was using name call before that and STILL can use call function in my app.js file

call is already available as a method on the function prototype - Function.prototype.call . This means soap is a function, which is why call works, but checkUser doesn't.

soap is a function because you're exporting a function from your file, and simply renaming it in your main file. If you want to change the name, either change the import name:

const checkUser = require("../../models/soapCall");

Or export an object and use it as such:

module.exports = { checkUser };
// Main file
const soap = require("../../models/soapCall");
soap.checkUser(...);

The object method will also allow you to export multiple functions from the one file - you can get these into their own variables with destructuring:

module.exports = { checkUser, otherFunc };
// Main file
const { checkUser, otherFunc } = require("../../models/soapCall");
checkUser(...); // Calls checkUser function
otherFunc(...); // Calls otherFunc function

You are exporting a function not an Object, so you need to directly call soap() .

And about being able to run call , it's part of function prototype. So you got confused with Function.prototype.call()

Use it like this, as per the comment by @Wiktor Zychla

soapCall.js

exports.checkUser(username, password){

}

app.js

const soap = require('../../models/soapCall');
soap.checkUser(username, password);

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