javascript - javascript函数在require语句后什么时候需要空括号?
问题描述
我正在使用 module.exports 来导出函数。它们中的大多数是这样导入的:
const logger = require('../middleware/logger')
我知道,如果我需要将参数传递给我将使用的函数:
const logger = require('../middleware/logger')(arg)
但最近我遇到了一个需要用 empy 括号调用的函数:
require('./startup/db')()
否则无法建立与数据库的连接。有来自 './startup/db' 的代码:
const mongoose = require('mongoose')
mongoose.set('useCreateIndex', true)
const logger = require('../middleware/logger')
module.exports = function () {
mongoose.connect('mongodb://localhost:27017/data', {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => logger.info('Connected to MongoDB'))
}
谁能解释什么时候require('module')
不工作而我应该require('module')()
改用?
解决方案
这是因为'./startup/db'
返回一个函数而不是一个值。需要调用此函数,否则只存储对该函数的引用。
现在由于这个函数不需要参数并且只需要被调用,因此没有任何值传递给它。
推荐阅读
- elasticsearch - 在 Spring Data Elasticsearch 中创建模式
- pandas - 为什么索引只有一个行标签的数据框不起作用?
- python - Maya - 聆听动画曲线的变化
- java - 并非所有语句都添加到 Esper 运行时 V8.5
- ios - Xcode:从 URL 获取字典键不起作用
- linux - 相对于 rsync,如何获得 ZFS 模块的更高优先级?
- python - 计算个人在 pandas 中执行特定任务的次数
- react-native - react-native 中的数组数据存储
- javascript - 从控制器调用函数 - angularjs
- javascript - 使用 groupby 重塑对象