首页 > 解决方案 > 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')()改用?

标签: javascriptnode.js

解决方案


这是因为'./startup/db'返回一个函数而不是一个值。需要调用此函数,否则只存储对该函数的引用。
现在由于这个函数不需要参数并且只需要被调用,因此没有任何值传递给它。


推荐阅读