我有两个文件: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.js,而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();


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

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

为了让我们对您所说的无效的代码方案进行更详细的评论,您必须向我们展示该确切的代码方案。描述文字上的差异而不是显示实际代码会使您很难遵循,也无法发现您可能因疏忽而犯错的任何其他问题,从而导致问题。

关于javascript - Node/表达式中require('module')()和const mod = require('module')mod()之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44081822/

10-16 05:59