node/express 中的 require('module')() 和 const mod = require('module') mod() 之间的区别

Difference between require('module')() and const mod = require('module') mod() in node/express

我有两个文件:server.jsdb.js

server.js 看起来是这样的:

...
const app = express();

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

app.listen(3000, () => {
  console.log('Server started on port 3000')
});
...

db.js这样:

...
function init() {
  const db = require('express-pouchdb')(PouchDB, {
    mode: 'minimumForPouchDB'
  });

  return db;
}
...

这工作得很好,我可以从我的前端访问 pouchdb http-api。但是之前,我在 db.js 的顶部有 const PouchDBExpress = require('pouchdb-express');,而 init() 的第一行是这样的; const db = PouchDBExpress(PouchDB, {。这导致 pouchdb 中的一个内部文件出现错误 cannot set property query on req which only has getters(释义)。

所以这让我从 pouchdb-servers GitHub 示例中复制了示例,这些示例需要并直接调用 pouched-express,并且一切正常。对此有解释吗?我很高兴它现在可以工作了,但我对导致这种情况的原因有点困惑。

唯一的区别:

require('module')()

const mod = require('module');
mod();

在第二种情况下,您保留了对模块导出对象的引用(可能用于其他用途),而在第一种情况下您没有。

两种情况都加载模块,然后将导出的对象作为函数调用。但是,如果模块导出具有您需要访问的其他属性或其他方法,那么显然,您需要像第二个选项一样保留对它的引用。

为了让我们更详细地评论您所说的无效代码方案,您必须向我们展示确切的代码方案。用文字描述不同之处而不是显示实际代码会使人难以理解并且无法发现您可能无意中做错导致问题的任何其他事情。

require('module')() 中,您不保留对导入的 module 的引用。

虽然在 const mod = require('module'); mod(),您保留了一个引用,以后可以在您的代码中使用相同的引用。

这个问题可能是由于其他原因造成的,比如 -

  1. 您是否正在使用数据库的另一个全局实例,并且您的代码在给定的情况下工作,因为您正在创建一个本地实例
  2. 一些其他代码相关的场景。

请提供更多详细信息