首页 > 解决方案 > 即使没有导入,导入模块 node.js 函数也会覆盖另一个函数

问题描述

在下面的代码中,我使用的是 expresjs

//index.js

app.use('/',routes());

//app/routes.js
module.exports = function() {

   express = require('express');
   const loggedUserProfileController = require('../controllers/LoggedUserProfile');
   const userProfileController = require('../controllers/userProfile');
   const router = express.Router();
   router.post('/get-logged-user-profile', loggedUserProfileController.getLoggedUserProfile());
   router.post('/get-user-profile-data', userProfileController .getUserProfile());

   return router;
   }

控制器

   //controllers/loggedUserProfile.js
  module.exports = 

  {
   getLoggedUserProfile:function(){

   return getLoggedUserProfile:function= (req, res, next) => {
          getUserCustomData();
     }
  }
  getUserCustomData(){console.log('logged user')}


  //controllers/userProfile.js
  module.exports = 

  {
   getUserProfile:function(){

   return getUserProfile:function= (req, res, next) => {
          getUserCustomData();
     }
  }
  getUserCustomData(){console.log('user')}

输出是'user' 第二个 getUserCustomData 覆盖第一个关于我没有在 module.exports 中导入它的可能性

标签: javascriptnode.jsexpress

解决方案


是的,这是可能的。函数定义被提升、声明和分配。如果您在前一个之后在相同范围内定义另一个,则新定义现在将覆盖原始定义。

函数语句/定义中使用的标识符不是常量,因此需要重新分配。如果您希望它在创建后保持静态,您可以这样做const getUserCustomData = function () { ... },并且第二次尝试重新分配将为您抛出错误。


推荐阅读