我有两个文件:server.js
和db.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/