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

时间:2017-05-20 04:12:51

标签: javascript node.js express pouchdb

我有两个文件: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。但之前,我const PouchDBExpress = require('pouchdb-express');的顶部有db.jsinit()的第一行看起来像这样; const db = PouchDBExpress(PouchDB, {。这在pouchdb中的一个内部文件中出现了错误cannot set property query on req which only has getters(释义)。

所以这让我复制了pouchdb-servers GitHub示例中的exaples,这些示例需要并直接调用pouched-express,并且everthing工作得很好。对此有解释吗?我很高兴它现在有效,但我对可能导致这种情况的原因感到困惑。

2 个答案:

答案 0 :(得分:3)

唯一区别:

require('module')()

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

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

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

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

答案 1 :(得分:0)

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

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

此问题可能是由于某些其他原因造成的 -

  1. 您是否正在使用数据库的另一个全局实例,并且在您创建本地实例时,您的代码在给定的情况下工作
  2. 其他一些依赖于代码的方案。
  3. 请提供相同的详细信息