javascript - 即使没有导入,导入模块 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 中导入它的可能性
解决方案
是的,这是可能的。函数定义被提升、声明和分配。如果您在前一个之后在相同范围内定义另一个,则新定义现在将覆盖原始定义。
函数语句/定义中使用的标识符不是常量,因此需要重新分配。如果您希望它在创建后保持静态,您可以这样做const getUserCustomData = function () { ... }
,并且第二次尝试重新分配将为您抛出错误。
推荐阅读
- javascript - 如何获取动态创建的 ID?
- android - 如何获得可以与 RxAndroid 一起使用的普通字符串作为改造响应?
- node.js - 在passportJS中从未使用Google Strategy调用deserializeUser函数
- python - python:tkinter 单选按钮和按钮设置文本属性,但在 Mac 上不显示任何内容
- ruby-on-rails - 每次使用rails加载后触发javascript ajax部分
- javascript - javascript记录语音停止并保存在20秒
- asp.net - @if 在更改其他表单元素时不呈现表单选项
- java - 内部连接 hql 查询多对多不起作用
- monitoring - cAdvisor 显示的磁盘使用情况
- firebase - 将数据发送到 React Native 中的导入模块